gpt4 book ai didi

xml - 如何使用 iText 填写 XFA 表单?

转载 作者:数据小太阳 更新时间:2023-10-29 02:04:55 24 4
gpt4 key购买 nike

代码:

using (FileStream pdf = new FileStream("C:/test.pdf", FileMode.Open))
using (FileStream xml = new FileStream("C:/test.xml", FileMode.Open))
using (FileStream filledPdf = new FileStream("C:/test_f.pdf", FileMode.Create))
{
PdfReader.unethicalreading = true;
PdfReader pdfReader = new PdfReader(pdf);
PdfStamper stamper = new PdfStamper(pdfReader, filledPdf);

stamper.AcroFields.Xfa.FillXfaForm(xml);
stamper.Close();
pdfReader.Close();
}

这段代码没有抛出异常,一切似乎都正常,但如果我打开填充的 pdf,Adobe Reader 会说类似这样的话:

This document enabled extended features. This document was changed since it was created and using extended features isn't possible anymore.

某些字段已正确填写,但我无法对其进行编辑。有些字段是空的。如果我通过单击 Adob​​e Reader 中的“导入数据”手动选择 xml,表单会正确填写,所以我猜 xml 中没有错误。

最佳答案

您没有正确创建 PdfStamper 对象。使用:

PdfStamper stamper = new PdfStamper(pdfReader, filledPdf, '\0', true)

在您的代码中,您没有在追加模式下使用 PdfStamper。这意味着 iText 将重新组织 PDF 中的不同对象。通常这不是问题。

但是:您的 PDF 启用了 Reader,这意味着您的 PDF 是使用 Adob​​e 拥有的私钥进行数字签名的。通过重新组织 PDF 中的对象,该签名被破坏。您已经提到的消息清楚地表明了这一点:

This document enabled extended features. This document was changed since it was created and using extended features isn't possible anymore.

您以不允许的方式更改了文档(请参阅我的 book 标题为“保留启用 Reader 的表单的使用权”的第 8.7 节)。

为避免破坏签名,您需要在附加模式下使用 PdfStamper。 iText 现在不会重新组织原始内容,而是会完整地保留原始文件并在原始文件末尾追加新内容。

关于xml - 如何使用 iText 填写 XFA 表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26629498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com