从单个打印作业打印多个PDF作为单个打印作业(物理打印)
我想在单个打印作业中从java(使用java打印服务)打印多个pdf。从单个打印作业打印多个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对象并返回它。
我也以类似的方式(使用Book对象)尝试了Sun的PDFRenderer PDFRenderer,但是我的代码仍然只打印出第一页。
有没有人遇到过类似的问题?有没有可能会失踪的解决方案?
AFAIK,你不能,多个文件将被打印在多个作业。
解决方法可以将所有pdf加入单个文档并打印出来。
: -/
不是Java特定的,但我已经在C#中体验过这个。我通过将每个文档打印到一个文件(在编程上相当于检查打印对话框上的“PrintToFile”复选框),然后将每个文件连接到一个内存流中,并以原始格式传递给Win32 API打印机后台来解决此问题(因为输出到文件默认情况下已正确格式化)。
您可能能够使用iText库中的一个文档中使用类似的技术在Java中
我在JTabbedPane中,每一次几个JPanels一个单独的页面上打印时遇到了同样的困难。我把它们收集在一本书中,但它只打印第一页。
Book类效果不错(正确的页数),但我想问题来自setPageable。由于一本书不是可打印的,我做了它,它工作!
解决方法:
-
设计一个PrintableBook类:扩展书,实现了打印
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
好的解决方法!但是,我不认为,问题在于`setPageable()`方法。此外,您不必为页面使用单独的“Vector”,因为“Book”在内部执行此操作。因此,使用getNumberOfPages()而不是`pages.size()`和`getPrintable(pageIndex)`而不是`pages.elementAt(pageIndex)`调用。 – Akshat 2015-03-20 05:50:36