2017-04-20 514 views
0

我們正在嘗試從iText 5升級到iText 7,並且看到了幾個問題。我收到一個異常爲「com.itextpdf.io.IOException:未找到PDF startxref。」在PdfReader#readPdf()裏面,最後在調用方法中得到一個異常爲「com.itextpdf.kernel.PdfException:Trailer not found。」。iText 7 - com.itextpdf.io.IOException:未找到PDF startxref

我的用例是創建一個使用inputSream PdfReader實例,然後從讀者創造PdfDocument並通過PdfWriter作爲構造parameter.We試圖修改現有的PDF,示例代碼如下

PdfReader pdfReader = new PdfReader(inputStream); 
pdfReader.setUnethicalReading(true); 
ByteArrayOutputStream os = new ByteArrayOutputStream(); 
PdfDocument pdfDocument = new PdfDocument(pdfReader, new PdfWriter(os)); 

燦有人請提出我做錯了什麼,以及我們如何解決這個問題。我們有一個實用的方法來編寫輸出流並創建一個新的pdf附件。

+1

'inputStream'從哪裏來?您確定您正在閱讀正確的PDF文件(即,您可以使用可用的PDF查看器工具打開它)嗎?你能分享一個你有問題的樣本PDF嗎? –

+1

簡單地說,錯誤消息意味着你的'InputStream'不在pdf的開頭。即要麼根本沒有有效的pdf,要麼已經(部分或完全)讀取流。 – mkl

+0

@ Alexy- pdf作爲附件附加到現有表中,我們有一個API,通過它可以將附件作爲InputStream讀取。我想,正在創建的PDF已損壞。我需要查看該代碼,瞭解如何在Pdf字段中設置值。 –

回答

2

複製從評論的答案:

我得到這個問題定下來,我需要關閉pdfDocument我 從輸出流寫入附件之前。

我沒有正確關閉流,我創建了pdfDocument 實例,並在關閉 pdfDocument之前從輸出流中讀取。因此,我需要先關閉pdfDocument流,然後從輸出流中讀取 以創建附件。