2013-08-20 99 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”)。 –

相关问题