【问题标题】:How to flatten some PDF form fields but not all of them如何展平一些 PDF 表单域,但不是全部
【发布时间】:2013-07-02 15:30:40
【问题描述】:

我将 C# 和 iTextSharp 用于 PDF。我有一个 PDF 模板,其中包含信息表单域和电子签名表单域。我需要能够让工作人员填写我们的表格部分,然后在代码中,展平该部分(不理会签名字段),然后我会将 PDF 传递给 DocuSign 的 API,让用户以电子方式签署文档。

我的要求是只有应该由用户(签名)编辑的字段在到达 DocuSign API 时才是表单字段。在将所有其他字段传递给 DocuSign API 之前,我必须展平所有其他字段(DocuSign 可以自动标记表单字段以进行签名)。

有人知道怎么做吗?我曾考虑过获取签名字段的位置,并在将整个 PDF 展平后使用 iTextSharp 添加表单字段,但我觉得这是一个 hack。

【问题讨论】:

    标签: c# pdf itextsharp docusignapi


    【解决方案1】:

    如果您想展平特定字段而不是整个文档,那么我相信您可以使用以下内容:

    Stamper.FormFlattening = true;
    Stamper.PartialFormFlattening("FieldName");
    

    此方法的唯一缺点是您需要列出每个需要展平的字段。我认为它们也需要包含一个值(即您不能展平空白字段)。

    【讨论】:

      【解决方案2】:

      是的,您可以指定要更新的文件的名称,只需查看以下示例。

      http://www.4guysfromrolla.com/articles/030211-1.aspx

      【讨论】:

        【解决方案3】:

        请参阅 DocuSign 的 REST API 指南中的以下页面,因为它提供了有关您可以使用 Adob​​e 表单字段和一些特殊情况执行哪些操作的一些有用信息:

        http://www.docusign.com/p/RESTAPIGuide/Content/REST%20API%20References/Document%20Parameters.htm

        【讨论】:

          【解决方案4】:

          对于 XFA 表格,您会得到 ​​p>

          XFA 表单不支持部分表单展平。

          如果您使用PartialFormFlattening,则例外。

          为了扁平化我使用的一些字段

          stamper.AcroFields.SetFieldProperty(fieldName, "setfflags", PdfFormField.FF_READ_ONLY, null);
          

          确保您使用完整的 fieldName(例如,W-9 Name 字段使用“topmostSubform[0].Page1[0].f1_1[0]”而不是“f1_1”)否则它将不起作用。

          我也尝试过删除 XFA

          PdfDictionary acro =
             (PdfDictionary)PdfReader.GetPdfObject(
                     pdfReader.Catalog.Get(PdfName.ACROFORM));
                          acro.Remove(PdfName.XFA);
          

          正如它所描述的 here 但我得到了同样的例外。

          【讨论】:

            猜你喜欢
            • 2013-01-05
            • 2021-10-06
            • 2018-02-01
            • 1970-01-01
            • 1970-01-01
            • 2013-11-06
            • 2015-01-19
            • 2011-08-01
            相关资源
            最近更新 更多