我想在一个打印作业中从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对象),但我的代码仍然只打印出第一页。
之前有没有遇到过类似的问题?有没有我可能缺少的解决方案?
答案 0 :(得分:2)
不是特定于Java的,但我在C#中遇到过这个问题。我通过将每个文档打印到一个文件(在编程上等同于打印对话框上的“PrintToFile”复选框)解决了它,然后将每个文件连接成一个内存流,我以原始格式传递给Win32 API打印机假脱机(因为默认情况下,输出到文件已正确格式化。
您可以在Java中使用类似的技术
答案 1 :(得分:2)
我在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
答案 2 :(得分:1)
您应该使用iText库将所有pdf文档合并到一个文档中,然后逐页打印合并的文档。
答案 3 :(得分:0)
AFAIK,你不能,多个文件将被打印在多个工作岗位上。
解决方法是将所有pdf加入单个文档并打印出来。
: - /