Print a PDF file using PrinterJob in Java

前端 未结 5 1620
误落风尘
误落风尘 2020-12-01 08:30

I have an issue when trying to print a PDF file using Java. Here is my code:

PdfReader readFtp = new PdfReader();    // This class is used for reading a PDF          


        
相关标签:
5条回答
  • 2020-12-01 08:50

    The following worked for me to print multiple PDF document with a print dialog:

    public void printPDF()
    {
        PrinterJob printerJob = PrinterJob.getPrinterJob();
    
        PrintService printService;
        if(printerJob.printDialog())
        {
            printService = printerJob.getPrintService();
        }
        DocFlavor docType = DocFlavor.INPUT_STREAM.AUTOSENSE;
    
        for (//fetch documents to be printed)
        {
            DocPrintJob printJob = printService.createPrintJob();
            final byte[] byteStream = // fetch content in byte array;
                Doc documentToBePrinted = new SimpleDoc(new ByteArrayInputStream(byteStream), docType, null);
            printJob.print(documentToBePrinted, null);
        }
    }
    
    0 讨论(0)
  • 2020-12-01 09:01

    Pageable implementation of PDDocument is deprecated, use PDPageable adapter class instead and try setPrintable instead of setPageable:

    job.setPrintable(new PDPageable(document));
    
    0 讨论(0)
  • 2020-12-01 09:12

    This worked for me to print a PDF with a plain JRE:

    public static void main(String[] args) throws PrintException, IOException {
        DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PAGEABLE;
        PrintRequestAttributeSet patts = new HashPrintRequestAttributeSet();
        patts.add(Sides.DUPLEX);
        PrintService[] ps = PrintServiceLookup.lookupPrintServices(flavor, patts);
        if (ps.length == 0) {
            throw new IllegalStateException("No Printer found");
        }
        System.out.println("Available printers: " + Arrays.asList(ps));
    
        PrintService myService = null;
        for (PrintService printService : ps) {
            if (printService.getName().equals("Your printer name")) {
                myService = printService;
                break;
            }
        }
    
        if (myService == null) {
            throw new IllegalStateException("Printer not found");
        }
    
        FileInputStream fis = new FileInputStream("C:/Users/John Doe/Desktop/SamplePDF.pdf");
        Doc pdfDoc = new SimpleDoc(fis, DocFlavor.INPUT_STREAM.AUTOSENSE, null);
        DocPrintJob printJob = myService.createPrintJob();
        printJob.print(pdfDoc, new HashPrintRequestAttributeSet());
        fis.close();        
    }
    
    0 讨论(0)
  • 2020-12-01 09:14

    My Printer did not support native PDF printing.

    I used the open source library Apache PDFBox https://pdfbox.apache.org to print the PDF. The printing itself is still handeled by the PrinterJob of Java.

    import java.awt.print.PrinterJob;
    import java.io.File;
    
    import javax.print.PrintService;
    import javax.print.PrintServiceLookup;
    
    import org.apache.pdfbox.pdmodel.PDDocument;
    import org.apache.pdfbox.printing.PDFPageable;
    
    public class PrintingExample {
    
        public static void main(String args[]) throws Exception {
    
            PDDocument document = PDDocument.load(new File("C:/temp/example.pdf"));
    
            PrintService myPrintService = findPrintService("My Windows printer Name");
    
            PrinterJob job = PrinterJob.getPrinterJob();
            job.setPageable(new PDFPageable(document));
            job.setPrintService(myPrintService);
            job.print();
    
        }       
    
        private static PrintService findPrintService(String printerName) {
            PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
            for (PrintService printService : printServices) {
                if (printService.getName().trim().equals(printerName)) {
                    return printService;
                }
            }
            return null;
        }
    }
    
    0 讨论(0)
  • 2020-12-01 09:15

    Try this code:

    FileInputStream fis = new FileInputStream(“C:/mypdf.pdf”);
    Doc pdfDoc = new SimpleDoc(fis, null, null);
    DocPrintJob printJob = printService.createPrintJob();
    printJob.print(pdfDoc, new HashPrintRequestAttributeSet());
    fis.close();
    

    You can also follow these steps

    0 讨论(0)
提交回复
热议问题