[英]Printing Multiple PDFs from Java as a single print job (physical printing)
我想在一个打印作业中从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。 既然一本书不是可印刷的,我就成功了,它有效!
解决方法:
设计一个PrintableBook类:extends Book,实现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); } } }
然后使用printJob.setPrintable( printableBook )
而不是setPageable
您应该使用iText库将所有pdf文档合并到一个文档中,然后逐页打印合并的文档。
AFAIK,你不能,多个文件将被打印在多个工作岗位上。
解决方法是将所有pdf加入单个文档并打印出来。
: - /
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.