PDFStamper在几个PDF文件上失败(itext 5.5.1)

时间:2014-05-23 13:50:16

标签: itext

我尝试使用数据填充PDF表单并获得PDFStamper(itext版本5.5.1)以处理多个PDF文件,但在某些情况下它总是失败。示例代码:

PdfReader reader = new PdfReader(new FileInputStream("C:/Temp/source.pdf"));
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("C:/Temp/temp.pdf"));
stamper.close();

到目前为止有两个不同的错误消息,第一个:

Exception in thread "main" java.lang.AbstractMethodError: javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V
    at com.itextpdf.xmp.impl.XMPMetaParser.createDocumentBuilderFactory(XMPMetaParser.java:423)
    at com.itextpdf.xmp.impl.XMPMetaParser.<clinit>(XMPMetaParser.java:71)
    at com.itextpdf.xmp.XMPMetaFactory.parseFromBuffer(XMPMetaFactory.java:167)
    at com.itextpdf.xmp.XMPMetaFactory.parseFromBuffer(XMPMetaFactory.java:153)
    at com.itextpdf.text.pdf.PdfStamperImp.close(PdfStamperImp.java:337)
    at com.itextpdf.text.pdf.PdfStamper.close(PdfStamper.java:208)

第二

java.lang.reflect.InvocationTargetException
[...]
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.itextpdf.xmp.impl.XMPMetaParser
    at com.itextpdf.xmp.XMPMetaFactory.parseFromBuffer(XMPMetaFactory.java:167)
    at com.itextpdf.xmp.XMPMetaFactory.parseFromBuffer(XMPMetaFactory.java:153)
    at com.itextpdf.text.pdf.PdfStamperImp.close(PdfStamperImp.java:337)
    at com.itextpdf.text.pdf.PdfStamper.close(PdfStamper.java:208)

错误消息各不相同,可能是因为环境不同(完整应用程序与测试类,但都使用itext-5.5.1.jar)。

其中一个工作PDF表单是使用OpenOffice Writer创建的,它生成了1.4版(Acrobat 5.x)文档。失败的PDF表单是使用Acrobat Distiller 7.0.5,pdf 1.6版(Acrobat 7.x)创建的。我已经尝试将它转换为版本1.4 / 5.x而没有运气。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我们的项目遇到了同样的问题,我们使用FOP生成PDF和iText进行PDF签名。

FOP依赖于xercesImpl:xerces jar。这个jar对于JRE&lt; = 1.4非常重要,但是在JRE&gt; 1.4中不需要它,并且没有它(有关JDK 1.6 and Xerces?的更多信息)。

Ps:检查您是否在类路径上没有xerces库,如果是,请将其删除。

答案 1 :(得分:0)

我也遇到了同样的问题(使用xerces),我可以通过在我的依赖项中添加排除项来解决它:

    <dependency>
        <groupId>net.sf.barcode4j</groupId>
        <artifactId>barcode4j-fop-ext-complete</artifactId>
        <version>2.0</version>
        <type>jar</type>
        <exclusions>
            <exclusion>
                <groupId>xerces</groupId>
                <artifactId>xercesImpl</artifactId>
            </exclusion>
        </exclusions>
    </dependency>