2009-04-21 114 views
3

我想在單個打印作業中從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,但是我的代碼仍然只打印出第一頁。

有沒有人遇到過類似的問題?有沒有可能會失蹤的解決方案?

回答

0

AFAIK,你不能,多個文件將被打印在多個作業。

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

: -/

2

不是Java特定的,但我已經在C#中體驗過這個。我通過將每個文檔打印到一個文件(在編程上相當於檢查打印對話框上的「PrintToFile」複選框),然後將每個文件連接到一個內存流中,並以原始格式傳遞給Win32 API打印機後臺來解決此問題(因爲輸出到文件默認情況下已正確格式化)。

您可能能夠使用iText庫中的一個文檔中使用類似的技術在Java中

2

我在JTabbedPane中,每一次幾個JPanels一個單獨的頁面上打印時遇到了同樣的困難。我把它們收集在一本書中,但它只打印第一頁。

Book類效果不錯(正確的頁數),但我想問題來自setPageable。由於一本書不是可打印的,我做了它,它工作!

解決方法:

  1. 設計一個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); 
         } 
        } 
    } 
    
  2. 然後使用printJob.setPrintable(printableBook)代替setPageable

+1

好的解決方法!但是,我不認爲,問題在於`setPageable()`方法。此外,您不必爲頁面使用單獨的「Vector」,因爲「Book」在內部執行此操作。因此,使用getNumberOfPages()而不是`pages.size()`和`getPrintable(pageIndex)`而不是`pages.elementAt(pageIndex)`調用。 – Akshat 2015-03-20 05:50:36

相關問題