2

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

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

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

4

4 回答 4

4

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

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

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

于 2013-07-02T19:48:15.333 回答
0

Please see the following page from DocuSign's REST API guide as it has some good info on what you can do with the Adobe form fields and some special cases:

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

于 2013-07-02T21:01:10.817 回答
0

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

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

于 2013-07-02T15:48:07.773 回答
0

对于 XFA 表格,您会得到

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”)否则它将不起作用。

我也试过用

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

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

于 2016-11-07T12:21:29.757 回答