3

我正在尝试填写 USCIS 表格,填写后将其设为只读(将其展平)。我不确定它为什么这样做。即使我没有任何代码可以将其展平。我搜索了堆栈溢出并尝试了许多不同的方法(使用 itextsharp 5.5.9 和 itext 7),但仍然无法正常工作。

这是我正在使用的示例代码

string src = @"https://www.uscis.gov/sites/default/files/files/form/i-90.pdf";
    string dest = @"C:\temp\i-90Filled.pdf";

    var reader = new PdfReader(src);
    reader.SetUnethicalReading(true);
    var writer = new PdfWriter(dest);

    PdfDocument pdfDoc = new PdfDocument(reader, writer);


    // add content
    PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDoc, true);

    IDictionary<String, PdfFormField> fields = form.GetFormFields();

    PdfFormField toSet;

    fields.TryGetValue("form1[0].#subform[0].P1_Line3b_GivenName[0]", out toSet);
    toSet.SetValue("John");

    pdfDoc.Close();
4

1 回答 1

4

使用 iTextSharp 5 填充表单如下:

string src = @"https://www.uscis.gov/sites/default/files/files/form/i-90.pdf";
string dest = @"C:\temp\i-90Filled.pdf";

PdfReader pdfReader = new PdfReader(src);
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(
        dest, FileMode.Create));
AcroFields form = pdfStamper.AcroFields;         
form.SetField("form1[0].#subform[0].P1_Line3b_GivenName[0]", "John");

请注意,您尝试填写的表格是混合表格。它包含两次对表单的描述:一次是 AcroForm;一次是 AcroForm;一次是 AcroForm。一次作为 XFA 表格。您可能希望通过添加以下行来删除 XFA 表单:

form.RemoveXfa();

有关更多信息,请阅读文档:

您的代码将 iText 7 用于 C#。如果您希望该代码正常工作,您肯定需要删除 XFA 部分,因为 iText 7 不支持 XFA。iText 7 的开发考虑了 PDF 2.0(该规范将于 2017 年发布)。XFA 将在 PDF 2.0 中弃用。不允许有效的 PDF 2.0 文件包含 XFA 流。

于 2016-09-22T21:02:10.460 回答