2011-08-18 82 views
1

我目前正在處理的項目需要大量打印文檔,這些文檔將郵寄給客戶。例如,一次印刷運行可能包含超過1000封信件,其中每封信件都會轉到不同的客戶端。PDFBox中的合併文檔既沒有空白頁也沒有太多...但只在打印時

爲了生成此打印運行,外部服務(即不使用PDFBox)首先將這些字母中的每一個都生成爲單個PDF文件。然後,我的代碼加載所有這些PDF文件,將它們與PDFBox合併在一起(以便它們可以作爲打印房間中的單個作業打印),然後向前端(也帶有PDFBox)添加一個「橫幅頁面」告訴印刷廠如何處理這些字母。

一切都打印雙面。但是,由於每封信都要寄給不同的客戶,所以我不能在一張紙上背對背地打印兩封信。這意味着任何具有奇數頁面的信件都需要添加一個空白頁面。印刷只是以前,只包含兩個字母一個非常小的印數合併後的PDF文檔可以是這個樣子:

Banner Page 
Blank 
Letter 1 
Blank 
Letter 2 
Blank 

但是,這是我的問題進來,我添加了這個空白頁代碼:

PDFMergerUtility docMerger = new PDFMergerUtility(); 
for (PDDocument currDoc : documents) { 

    // Add blank page to document if odd number 
    if (currDoc.getNumberOfPages() % 2 != 0) { 
     currDoc.addPage(new PDPage()); 
    } 

    // Merge into single document 
    docMerger.appendDocument(mergedDoc, currDoc); 

    // Close currDoc 
    currDoc.close(); 
} 

這似乎一直工作的橫幅頁面,但對於某些類型的字母,它擰了起來。如果我打開生成的PDF,它看起來沒問題,但是當我打印時,每封信之間都會有一張額外的空白紙。

所以當我看到這個在Acrobat Reader(甚至PDFBox的的觀衆):

Sheet 1: Banner Page 
Sheet 2: Letter 1 
Sheet 3: Letter 2 

打印輸出看起來是這樣的:

Sheet 1: Banner Page 
Sheet 2: Letter 1 
Sheet 3: BLANK! 
Sheet 4: Letter 2 
Sheet 5: BLANK! 

同時,如果我採取new PDPage()代碼出來,在Acrobat和打印輸出中,我得到以下結果:

Sheet 1: Banner Page 
Sheet 2: Letter 1 (front) AND Letter 2 (back) 

我有三通過PDDocument.silentPrint(PrinterJob)進行編輯調試,但當它深入到PDF結構中時,事情開始變得非常危險,沒有什麼東西會跳出來。任何想法可能會發生什麼?

回答

0

好的,我想我可能已經想出了這個問題。看起來有些字母是用「A4」紙設計的,而不是「Letter」。如果我只是看着Acrobat Reader中的文件,它看起來非常好,如果我從那裏打印信件,Reader必須自動將輸出壓縮到可用的紙張尺寸。不幸的是,PDFBox似乎沒有做同樣的擠壓。所以當通過PDFBox打印時,這封信會稍微翻到下一頁,導致我看到的奇怪行爲。

我還沒有機會測試這個理論呢......信開發者發現了這個錯誤,但他的修改還沒有放到我們的測試服務器上。如果這不能解決問題,我會回報。

+1

所以......紙張尺寸是最終的問題?如果是這樣,請接受你自己的答案:)。 – jjmontes