签署使用 itext 填充的 pdf 时出错

Error in siging a pdf filled using itext

我正在使用 iText 填写 pdf。此 pdf 包含一个 xfa,我通过 xml 文件填写此表格。填写表格后,用户需要下载并手动签名。到目前为止,一切都很好,表格中的每个字段都正确填写。如果用户在文件上签名,adobe reader 制作一份带有签名的新文件副本。

但是当用户尝试签署该 pdf 时,它会出现以下错误并且新生成的带有签名的文件不保存数据,它使所有字段空白。

At least one signature has problems

当用户在 pdf adobe 上签名时 reader 也会弹出签名验证

但是如果我在不使用 itext 的情况下手动填写相同的 pdf,它允许我成功地签署 pdf

这是我用来用 xml 数据填充 pdf 的代码:

public static byte[] FillXfaForm(byte[] byteArray, String xmlFilePath)
{
            PdfReader reader = new PdfReader(byteArray);

            using (MemoryStream ms = new MemoryStream())
            {
                using (PdfStamper stamper = new PdfStamper(reader, ms,'[=10=]',true))
                {  
                    stamper.Writer.CloseStream = false;
                    stamper.AcroFields.Xfa.FillXfaForm(xmlFilePath);
                }
                if(File.Exists(xmlFilePath))
                {
                    File.Delete(xmlFilePath);
                }
                return ms.ToArray();
            }   
}

这里是错误消息的屏幕截图

请帮我解决这个问题。

终于解决了这个问题

这个问题的原因是我更新了整个 xml 文档来填充 xfa 但是当我只更新数据部分而不是整个 xml 它工作没有任何错误。

我不知道它真正造成的区别是什么,因为在这个类似的问题中 "Bruno Lowagie" 声明您可以使用完整的 xml 替换,也可以仅更改数据部分。

How can I set XFA data in a static XFA form in iTextSharp and get it to save?

但对我来说,只有当我替换数据部分而不是整个 xml 数据时,它才允许我签署文档。

希望对遇到类似问题的人有所帮助。