首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用iText填写XFA表单?

如何使用iText填写XFA表单?
EN

Stack Overflow用户
提问于 2014-10-29 11:45:32
回答 1查看 3.2K关注 0票数 4

代码:

代码语言:javascript
复制
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会这样说:

此文档启用了扩展功能。这个文档被修改了,因为它是被创建的,并且不再可能使用扩展的特性。

有些字段填得很好,但我无法编辑。有些字段是空的。如果通过单击Adobe中的“Import”手动选择xml,表单将被正确填充,因此我猜xml中没有错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-29 11:49:57

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

代码语言:javascript
复制
PdfStamper stamper = new PdfStamper(pdfReader, filledPdf, '\0', true)

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

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

此文档启用了扩展功能。这个文档被修改了,因为它是被创建的,并且不再可能使用扩展的特性。

您以一种不允许的方式更改了文档(请参阅我的中题为“维护启用阅读器的表单的使用权限”的8.7节)。

为了避免破坏签名,您需要在附加模式下使用PdfStamper。现在,iText将不再重新组织原始内容,而是保持原始文件的原样,并在原始文件结束后追加新内容。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26629498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档