我正在使用C#和iTextSharp进行PDF格式化。我有一个PDF模板,其中包含信息的表单字段以及电子签名的表单字段。我需要能够让工作人员填写表格的一部分,然后在代码中,展平该部分(仅保留签名字段)然后我将把PDF传递给DocuSign的API,让用户以电子方式签署文档。
我要求只有用户(签名)应该可编辑的字段在到达DocuSign API时才是表单字段。在将所有其他字段传递给DocuSign API之前,我必须将其展平(DocuSign会自动为Signature标记表单字段)。
有谁知道怎么做?我已经考虑过获取签名字段的位置,并在展平整个PDF之后用iTextSharp添加表单字段,但我觉得这是一个黑客。
答案 0 :(得分:4)
如果您想要展平特定字段而不是整个文档,那么我相信您可以使用以下内容:
Stamper.FormFlattening = true;
Stamper.PartialFormFlattening("FieldName");
此方法的唯一缺点是您需要列出需要展平的每个字段。我认为它们也需要包含一个值(即你不能展平一个空白字段)。
答案 1 :(得分:0)
是的,您可以指定要更新的字段的名称,只需看一下以下示例。
答案 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;)否则它不会起作用。
我也尝试用
删除XFAPdfDictionary acro =
(PdfDictionary)PdfReader.GetPdfObject(
pdfReader.Catalog.Get(PdfName.ACROFORM));
acro.Remove(PdfName.XFA);
如描述here但我得到了同样的例外。