【发布时间】:2014-11-04 04:02:21
【问题描述】:
我正在创建一个 Web 应用程序,它将使用 iText 填写 PDF 表单。为了创建 PDF 表单,我首先使用 Microsoft Word 创建模板,保存它,然后在 Adobe Acrobat Xi Pro 中打开该文件,添加我的表单域,并将其保存为 PDF。问题是 PDF 没有与预告片一起保存,所以当我执行此操作时:
PdfReader reader = new PdfReader(templateName);
它抛出异常“java.io.IOException:未找到预告片”。我知道如果 PDF 有预告片,我可以阅读它,因为我尝试过阅读其他 PDF。所以看来问题是 Acrobat 没有在我的 PDF 中添加预告片。即使我尝试在 Acrobat 中从头开始创建 PDF 表单,它也不会与预告片一起保存。
还有其他人遇到过这个问题吗? Acrobat 中是否有一些设置会添加预告片?有没有办法让 iText 在没有预告片的情况下阅读它?
====更新====
我一定有一个旧版本的 iText,因为当我下载最新版本时,我能够阅读我的 PDF 文件。然而,在阅读文件并盖章后,我在关闭压模时遇到了异常。代码如下所示:
PdfReader reader = new PdfReader(templateName);
FileOutputStream os = new FileOutputStream(outputPath);
PdfStamper stamper = new PdfStamper(reader, os);
AcroFields acroFields = stamper.getAcroFields();
List<String> fields = getFieldNames(getContextCd());
for (String field : fields) {
acroFields.setField (field, StringUtil.checkEmpty(request.getParameter(field)));
}
stamper.setFormFlattening(true);
stamper.close();
我得到的错误是:
java.lang.AbstractMethodError: javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V 在 com.itextpdf.xmp.impl.XMPMetaParser.createDocumentBuilderFactory(XMPMetaParser.java:423) 在 com.itextpdf.xmp.impl.XMPMetaParser.(XMPMetaParser.java:71) 在 com.itextpdf.xmp.XMPMetaFactory.parseFromBuffer(XMPMetaFactory.java:167) 在 com.itextpdf.xmp.XMPMetaFactory.parseFromBuffer(XMPMetaFactory.java:153) 在 com.itextpdf.text.pdf.PdfStamperImp.close(PdfStamperImp.java:337) 在 com.itextpdf.text.pdf.PdfStamper.close(PdfStamper.java:208)
我添加到类路径中的唯一 jar 文件是 itextpdf-5.5.2.jar。我需要其他罐子吗?
【问题讨论】:
-
向我们展示 PDF。 Adobe Acrobat 总是添加预告片。也许还有另一个问题在起作用。另外:您使用的是哪个版本的 iText?我记得我们过去对预告片的位置非常严格:我们按字面意思实施规范,但有时我们必须不那么严格,因为并非所有 PDF 都遵守规范(但由 Acrobat Professional 创建的 PDF 总是这样做)。
-
如何显示 PDF?我很高兴分享它我只是不知道如何。
-
放到Dropbox等文件共享服务上,分享链接。屏幕截图不行,我们需要 PDF。
-
这是我的 PDF 文档的链接 - drive.google.com/file/d/0B1YxRPH2pSa4VVFvRThUcjNVZFk/…
-
java.lang.AbstractMethodError: javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V - 看起来您的 xml 不匹配-API 和 xml-API 在您的类路径上实现。