2016-07-27 56 views
1

我需要爲作爲字節數組提供的現有pdf文件添加水印。我以this爲例,但我創建的pdf似乎缺少文件結束標記和'startxref'關鍵字。Java iText:添加水印後沒有EOF標記

有什麼我沒有做對的嗎?還是缺少什​​麼?

PdfReader reader = new PdfReader(inputPDF); 
    PdfStamper stamper; 
    stamper = new PdfStamper(reader, outputPDF); 
    PdfContentByte under = stamper.getUnderContent(1); 
    Font f = new Font(FontFamily.HELVETICA, 15); 
    Phrase p = new Phrase(watermarkText, f); 
    ColumnText.showTextAligned(under, Element.ALIGN_CENTER, p, 297, 550, 0); 
    stamper.close(); 
    reader.close(); 

我檢查了PDF文件,this工具,這些都是錯誤的,我得到:

Open file. 
    0x80410108 - E - The end-of-file marker was not found. 
     - File: Formular_TEST_Watermark_V1_0.pdf 
    0x8041010A - E - The 'startxref' keyword or the xref position was not found. 
     - File: Formular_TEST_Watermark_V1_0.pdf 
    0x80410108 - E - The end-of-file marker was not found. 
     - File: Formular_TEST_Watermark_V1_0.pdf 
    Close file. 

編輯:

上面的代碼是正確的,我稍後在代碼中犯了一個錯誤當將PDF傳回主應用程序時,錯誤地作出了這樣的假設,因爲我已經多次成功傳輸了pdf,並且認爲我不會在那裏犯錯。我的錯。

爲了完整,inputPDF和outputPDF是ByteArrayInputStream和ByteArrayInputStream。

+1

它看起來不錯,但你不顯示你如何保存文檔和什麼。例如,如果網絡保存不當,保存到網絡很容易失敗。請張貼破碎的PDF。 –

+0

...並請解釋「inputPDF」和「outputPDF」是什麼。 – mkl

+0

感謝Paulo,你的提示讓我在正確的軌道上。上面的代碼是正確的,並做它應該做的事情。將xmlencoded帶水印的pdf返回主應用程序就是發生錯誤的地方,我忽略了我在那裏犯的一個錯誤。 – Rubikan

回答

0

感謝Paulo Soares所做的提示,我找到了真正的罪魁禍首。在問題中的水印本身的代碼是正確的,並做它應該做的。我相應地更新了這個問題。