簡體   English   中英

從Java打印多個PDF作為單個打印作業(物理打印)

[英]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。 既然一本書不是可印刷的,我就成功了,它有效!

解決方法:

  1. 設計一個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); } } } 
  2. 然后使用printJob.setPrintable( printableBook )而不是setPageable

您應該使用iText庫將所有pdf文檔合並到一個文檔中,然后逐頁打印合並的文檔。

請參閱使用Java打印PDF文檔

AFAIK,你不能,多個文件將被打印在多個工作崗位上。

解決方法是將所有pdf加入單個文檔並打印出來。

: - /

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM