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

时间:2013-07-02 15:30:40

标签: c# pdf itextsharp docusignapi

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

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

有谁知道怎么做?我已经考虑过获取签名字段的位置,并在展平整个PDF之后用iTextSharp添加表单字段,但我觉得这是一个黑客。

4 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

是的,您可以指定要更新的字段的名称,只需看一下以下示例。

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

答案 2 :(得分:0)

请参阅DocuSign的REST API指南中的以下页面,因为它有关于您可以使用Adobe表单字段和一些特殊情况做些什么的一些很好的信息:

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

答案 3 :(得分:0)

对于XFA表格,你得到

  

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

如果您使用PartialFormFlattening,则

例外。

要平放我用过的一些字段

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

确保使用完整的fieldName(例如W-9名称字段使用" topmostSubform [0] .Page1 [0] .f1_1 [0]" not" f1_1&# 34;)否则它不会起作用。

我也尝试用

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

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