简体   繁体   中英

Printing Multiple PDFs from Java as a single print job (physical printing)

I would like to print multiple pdfs from java (using the java print service) in a single print job.

I would like to send multiple pdfs as a single job to the printer. This is so that all the documents in my 'batch' print together and are not interleaved with someone else's print jobs when I go pick them up from the printer.

A batch potentially consists of 1000s of print jobs.

I tried jpedal, but it does not support java.awt.print.Book

        Book book = new Book();
        PdfDecoder pdfDecoder = readFileApplyOptions("C:/Temp/singlepagetest.pdf", pageFormat);
        book.append(pdfDecoder, pageFormat);

        PdfDecoder pdfDecoderTwo = readFileApplyOptions("C:/Temp/printfax-test.pdf",pageFormat);
        book.append(pdfDecoderTwo, pageFormat);

        printJob.setPageable(book);
        printJob.print();

only prints out the first pdf. How do I print multiple pdfs in a single job?

readFileAndApplyOptions() basically creates a new PdfDecoder object and returns it.

I also tried Sun's PDFRenderer PDFRenderer in a similar fashion (using the Book object), but my code still only prints out the first page only.

Has anyone encountered a similar issue before? Is there a solution I might be missing?

Not Java specific, but I've experience of this one in C#. I solved it by printing each document to a file (programmatically equivalent to checking the "PrintToFile" checkbox on a print dialog), then concatenated each file into a memory stream, which I passed to the Win32 API printer spool in raw format (since the output to file was already correctly formatted by default).

You might be able to use a similar technique in Java

I met the same difficulties when printing at once several JPanels of a JTabbedPane, each on a separate page. I gather them in a Book but it only prints the first page.

The Book class works well (right number of pages), but I suppose the problem comes from setPageable. Since a Book is not a Printable, I made it, and it works !

Workaround:

  1. Design a PrintableBook class : extends Book, implements Printable

     public class PrintableBook extends Book implements Printable { Vector<Printable> pages;// NB: we assume pages are single public PrintableBook() { super(); pages = new Vector<Printable>(); } public void add(Printable pp) { append(pp, pp.getPageFormat()); pages.add(pp); } public int print(Graphics g, PageFormat pf, int pageIndex) { if (pageIndex >= pages.size()) return NO_SUCH_PAGE; else { Printable pp = pages.elementAt(pageIndex); return pp.print(g, pf, 0); } } } 
  2. Then use printJob.setPrintable( printableBook ) instead of setPageable

You should merge all of your pdf documents in one document using iText library and then print the merged document page by page.

see Print a PDF Document in Java

AFAIK, you can't, multiple documents will be printed in multiple jobs.

A workaround could be join all the pdf into a single document and print them.

:-/

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM