使用 iText 进行 Acroform 编辑的 Pdf
Posted
技术标签:
【中文标题】使用 iText 进行 Acroform 编辑的 Pdf【英文标题】:Pdf with Acroform editing using iText 【发布时间】:2015-06-08 11:28:02 【问题描述】:我正在使用 iText 将文本添加到现有的 pdf 文件中。它适用于简单的 pdf,但在使用 AcroForms 的 pdf 时存在问题。
我的代码:
PdfReader reader = new PdfReader("/Users/simple-user/Downloads/acroform.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(
"/Users/simple-user/Downloads/acroform2.pdf"));
BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252,
BaseFont.NOT_EMBEDDED);
PdfContentByte over = stamper.getOverContent(1);
over.beginText();
over.setFontAndSize(bf, 10);
over.setTextMatrix(107, 107);
over.showText("page updated");
over.endText();
stamper.close();
错误信息: “此文档在 Adobe Acrobat Reader DC 中启用了扩展功能。该文档自创建以来已更改,扩展功能的使用不再可用。请联系作者获取此文档的原始版本。”
我没有想要添加到文件中的文本
任何想法我缺少什么?
【问题讨论】:
有什么问题?任何错误信息?我们需要更多细节才能提供帮助。 哦抱歉忘记了。错误消息“此文档在 Adobe Acrobat Reader DC 中启用了扩展功能。该文档在创建后已更改,扩展功能的使用不再可用。请联系作者获取此文档的原始版本。”并且没有我想添加到文件中的文本 请编辑您的问题以包含此错误,并尽可能详细。 【参考方案1】:您的诊断是错误的。 问题与 AcroForms 的存在无关。 问题与您的文档是否Reader Enabled有关。只能使用 Adobe 软件启用阅读器。这是一个需要使用 Adobe 的私钥进行数字签名的过程。当存在有效签名时,特定功能(在签名时的使用权限中定义)在 Adobe Reader 中解锁。
请查看此问题的答案以了解如何检测 PDF 是否已启用阅读器:How to Check PDF is Reader enabled or not using C#?
您更改了此类 PDF 的内容,因此您破坏了签名。破坏此签名是导致丑陋错误消息的原因:
本文档启用了 Adobe Acrobat Reader DC 中的扩展功能。该文档自创建以来已更改,并且不再使用扩展功能。请联系作者获取本文档的原始版本。
有两种方法可以避免此错误消息:
-
删除使用权限。这将导致不再启用 Reader 的表单。例如:如果文档的创建者允许将填写的表单保存在本地,则在移除使用权限后将不再可能。
以追加模式填写表格。这会导致文件变大,但会保留阅读器启用。
删除使用权限如下:
PdfReader reader = new PdfReader(path_to_file);
if (reader.hasUsageRights())
reader.removeUsageRights();
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(path_to_new_file));
stamper.close();
reader.close();
在追加模式下使用 iText 是这样完成的:
PdfReader reader = new PdfReader(src);
PdfStamper stamper =
new PdfStamper(reader, new FileOutputStream(dest), '\0', true);
stamper.close();
reader.close();
注意PdfStamper
中的额外参数。
【讨论】:
1.您为什么要使用要求您成为 PDF 专家的方法?为什么不使用 iText 中提供的便捷方法? 2. 您在位置 x=107 处添加文本; y = 107。你怎么知道这些是有效坐标? 下载 pages.itextpdf.com/ebook-***-questions.html 并搜索 Watermark 示例(有几个)。您的代码看起来像是从某处复制/粘贴的。如果您喜欢复制/粘贴,为什么不从大师本人那里复制/粘贴呢? ;-)以上是关于使用 iText 进行 Acroform 编辑的 Pdf的主要内容,如果未能解决你的问题,请参考以下文章