2013-08-20 131 views
2

我試圖使用Java 1.5將iText 1.02b添加到已創建的PDF中。當我將新頁面添加到現有的PDF中時,我收到了包含的異常。以下是我們遇到問題的方法中的代碼。將頁面添加到現有的PDF文件com.itextpdf.text.exceptions.InvalidPdfException:找不到PDF頭標記

public static File addSignaturePageToPDF(String fileName, InputStream fileInputStream, SignatureTemplateInfo signaturePageInfo, HttpServletRequest argRequest) throws Exception { 

int splitIdx = fileName.lastIndexOf("."); 
     File signedFile = File.createTempFile(fileName.substring(0,splitIdx), fileName.substring(splitIdx)); 
     SignatureModel signatureModel = SignatureHelper.getSignatureModel(signaturePageInfo.getCaseHeaders(), signaturePageInfo.getEventSubTp(), signaturePageInfo.getSignatureId(), argRequest); 

     byte[] signaturePdfAsBytes = SignatureHelper.createSignature(signatureModel, argRequest); 
     byte[] mainPdfAsBytes = getByteArrayFromInputStream(fileInputStream); 
    PdfReader mainPdfReader = new PdfReader(mainPdfAsBytes); << Exception here 
    PdfReader signaturePdfReader = new PdfReader(signaturePdfAsBytes); 

例外:

com.itextpdf.text.exceptions.InvalidPdfException: PDF header signature not found. 
    at com.itextpdf.text.pdf.PRTokeniser.checkPdfHeader(PRTokeniser.java:205) 
    at com.itextpdf.text.pdf.PdfReader.readPdf(PdfReader.java:496) 
    at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:189) 
    at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:178) 
    at icis.common.util.ConvertDocument.addSignaturePageToPDF(ConvertDocument.java:96) 
    at icis.cr.common.file.ViewFileAction.executeProcess(ViewFileAction.java:71) 
    at icis.common.action.BaseICISAction.execute(BaseICISAction.java:134) 
    at icis.cr.common.BaseCRAction.execute(BaseCRAction.java:41) 

感謝。

+0

考慮將signaturePdfAsBytes和mainPdfAsBytes的內容存儲到一些修剪的文件中並檢查它們。 – mkl

+0

哇 - 通常我不是指出你正在使用強大的舊版本iText的人 - 但對我來說,將近10年對我來說已經太舊了;-) 1.你有沒有考慮使用更新的版本?也許這個問題很久以前就解決了。 2.要檢測是否有問題,請在異常之前插入以下行:System.out.println(new String(mainPdfAsBytes));並檢查它是否以「PDF-1」開頭。 – Lonzak

回答

4

的異常告訴你,從你fileInputStream獲得的第一個字節不等於'%''P''D''F''-''1''.'

也許你想檢查該文件是空的,也許InputStream不能正確讀取,...

很多人你已經遇到過並固定了同樣的問題:

你應該調試代碼,通過保存mainPdfAsBytes到一個文件,並通過檢查該文件。它真的是一個PDF文件嗎? iText告訴你它不是以%PDF-1.開頭的。

+0

謝謝布魯諾!真的很高興認識你:) –

+0

確保文件路徑實際上是一個PDF文件,而不是別的東西。我有一個來自給定目錄的「文件列表」,並且過濾器缺少file.getName()。endsWith(「。pdf」)。 –

相關問題