代码:
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中没有错误。
发布于 2014-10-29 11:49:57
您没有正确地创建PdfStamper对象。使用:
PdfStamper stamper = new PdfStamper(pdfReader, filledPdf, '\0', true)在您的代码中,您没有在附加模式下使用PdfStamper。这意味着iText将重新组织PDF中的不同对象。通常这不成问题。
但是:您的PDF是启用阅读器的,这意味着您的PDF使用Adobe拥有的私钥进行数字签名。通过对PDF中的对象进行重新组织,该签名将被破坏。你已经提到的信息清楚地表明了这一点:
此文档启用了扩展功能。这个文档被修改了,因为它是被创建的,并且不再可能使用扩展的特性。
您以一种不允许的方式更改了文档(请参阅我的书中题为“维护启用阅读器的表单的使用权限”的8.7节)。
为了避免破坏签名,您需要在附加模式下使用PdfStamper。现在,iText将不再重新组织原始内容,而是保持原始文件的原样,并在原始文件结束后追加新内容。
https://stackoverflow.com/questions/26629498
复制相似问题