【问题标题】:PDFStamper fails on several PDF files (itext 5.5.1)PDFStamper 在几个 PDF 文件上失败 (itext 5.5.1)
【发布时间】:2014-05-23 13:50:15
【问题描述】:

我正在尝试用数据填充 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 版本,但没有成功。

有什么想法吗?

【问题讨论】:

  • 这看起来像“脏 XMP”。你能分享PDF吗
  • @BrunoLowagie 文件可用:File 1 File 2 同一文件的两个版本,使用不同的 PDF 生成器创建。
  • 嗯...我无法重现该问题,但我注意到您的错误消息中有一些内容:您的 CLASSPATH 中是否有两个不同的 iText 版本?
  • 不,我没有。但是你的暗示把我引向了正确的方向。我在类路径中有一个旧版本的 Apache Xerces 导致错误。我将不得不看看我是否可以安全地将其替换为第一眼看起来不错的当前版本。非常感谢!
  • 这是个好消息!这可能解释了AbstractMethodError

标签: itext


【解决方案1】:

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

FOP 依赖于 xercesImpl:xerces jar。这个 jar 对于 JRE 1.4 中不需要它,并且没有它也可以工作(有关JDK 1.6 and Xerces? 的更多信息)。

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

【讨论】:

    【解决方案2】:

    我遇到了同样的问题(使用 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-17
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      • 2015-05-26
      • 2015-11-21
      相关资源
      最近更新 更多