如何展平一些PDF表单字段,但不是全部字段

本文关键字:字段 全部 表单 何展平 PDF | 更新日期: 2023-09-27 18:20:41

我将C#和iTextSharp用于PDF。我有一个PDF模板,它有用于信息的表单字段,也有用于电子签名的表单字段。我需要让工作人员填写表格的这一部分,然后在代码中,展平这一部分(只保留签名字段),然后我将PDF传递给DocuSign的API,让用户以电子方式签署文档。

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

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

如何展平一些PDF表单字段,但不是全部字段

如果你想压平一个特定的字段而不是整个文档,那么我相信你可以使用以下方法:

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

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

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

https://web.archive.org/web/20211020001747/https://www.4guysfromrolla.com/articles/030211-1.aspx

请参阅DocuSign的REST API指南中的以下页面,因为它提供了一些关于如何处理Adobe表单字段和一些特殊情况的好信息:

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

对于XFA表单,您将获得

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

如果使用PartialFormFlattening,则发生异常。

为了平整一些字段,我使用了

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

请确保使用完整的fieldName(例如,对于W-9名称字段,请使用"topmastSubform[0]。Page1[0]。f1_1[0]"而不是"f1_1"),否则它将不起作用。

我还试着用删除XFA

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

正如这里所描述的,但我得到了同样的例外。