【问题标题】:Error in siging a pdf filled using itext对使用 itext 填充的 pdf 进行签名时出错
【发布时间】:2016-09-14 07:21:08
【问题描述】:

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

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

至少一个签名有问题

当用户签署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,'\0',true))
                {  
                    stamper.Writer.CloseStream = false;
                    stamper.AcroFields.Xfa.FillXfaForm(xmlFilePath);
                }
                if(File.Exists(xmlFilePath))
                {
                    File.Delete(xmlFilePath);
                }
                return ms.ToArray();
            }   
}

这是错误信息的屏幕截图

请帮我解决这个问题。

【问题讨论】:

  • 请分享有问题的 PDF 和 XML,以便重现问题。
  • 抱歉,由于某些安全原因,我无法提供 pdf
  • @mkl 如果你愿意,我可以给你更多细节
  • 我要做的第一件事是分析 Adob​​e 说文档已被更改或损坏的原因。因为有时 PDF 不会被更改为文件,而是包含一些细节,这使得 Adob​​e 更改了文件的内部表示。
  • 顺便说一下,我看到你在附加模式下使用PdfStamper。您这样做是因为它已经在之前您更改 XFA 表单信息吗?

标签: c# pdf itext


【解决方案1】:

终于解决了这个问题

这个问题的原因是我更新了整个 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 数据时,它才允许我签署文档。

我希望它能帮助面临类似问题的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多