繁体   English   中英

使用iText进行Acroform编辑的PDF

[英]Pdf with Acroform editing using iText

我正在使用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中的扩展功能。自创建以来,该文档已更改,不再使用扩展功能。请与作者联系以获取本文档的原始版本。”

而且没有我要添加到文件的文本

有什么想法我想念的吗?

您的诊断是错误的。 问题与AcroForms的存在无关。 问题与您的文档是否启用了Reader Enabled有关 启用读者功能只能使用Adobe软件完成。 此过程需要使用Adobe的私钥进行数字签名。 如果存在有效的签名,则会在Adobe Reader中解锁特定功能(在签名时使用权中定义)。

请查看该问题的答案,以了解如何检测PDF是否启用了Reader功能: 如何检查PDF是否启用了Reader功能,而不是使用C#?

您更改了此类PDF的内容,因此破坏了签名。 破坏此签名是导致难看的错误消息的原因:

本文档启用了Adobe Acrobat Reader DC中的扩展功能。 自创建文档以来,该文档已更改,不再使用扩展功能。 请与作者联系以获取本文档的原始版本。

有两种方法可以避免出现此错误信息:

  1. 删除使用权。 这将导致不再启用阅读器的表单。 例如:如果文档的创建者允许将填写的表单保存在本地,则在删除使用权后将不再可能。
  2. 在追加模式下填写表格。 这将导致更大的文件大小,但是将保留启用阅读器的功能。

删除使用权是这样完成的:

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的额外参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM