从Java打印多个PDF作为单个打印作业(物理打印)

我想在一个打印作业中从java(使用java打印服务)打印多个pdf。

我想将多个pdf作为单个作业发送到打印机。 这样,当我从打印机中取出它时,我的“批量”中的所有文档一起打印并且不与其他人的打印作业交错。

批次可能包含1000个打印作业。

我试过jpedal,但它不支持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(); 

只打印出第一个pdf。 如何在单个作业中打印多个pdf?

readFileAndApplyOptions()基本上创建一个新的PdfDecoder对象并返回它。

我也以类似的方式尝试了Sun的PDFRenderer PDFRenderer (使用Book对象),但我的代码仍然只打印出第一页。

有没有人遇到类似的问题? 我可能会错过一个解决方案吗?

不是Java特定的,但我在C#中体验过这个。 我通过将每个文档打印到一个文件(在编程上等同于检查打印对话框上的“PrintToFile”复选框)来解决它,然后将每个文件连接成一个内存流,我以原始格式传递给Win32 API打印机假脱机(因为默认情况下,输出到文件已正确格式化)。

您可以在Java中使用类似的技术

我在JTabbedPane的几个JPanel上打印时遇到了同样的困难,每个JPanel都在一个单独的页面上。 我把它们收集在一本书中,但它只打印第一页。

Book类运行良好(正确的页数),但我认为问题来自setPageable。 既然一本书不是可印刷的,我就成功了,它有效!

解决方法:

  1. 设计一个PrintableBook类:extends Book,实现Printable

     public class PrintableBook extends Book implements Printable { Vector pages;// NB: we assume pages are single public PrintableBook() { super(); pages = new Vector(); } 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. 然后使用printJob.setPrintable( printableBook )而不是setPageable

您应该使用iText库将所有pdf文档合并到一个文档中,然后逐页打印合并的文档。

请参阅使用Java打印PDF文档

AFAIK,你不能,多个文件将被打印在多个工作岗位上。

解决方法是将所有pdf加入到单个文档中并打印出来。

: – /