识别表单字段名称

Contents
[ ]

Aspose.PDF for .NET 提供创建、编辑和填写已创建的 Pdf 表单的能力。Aspose.Pdf.Facades 命名空间包含 Form 类,该类包含名为 FillField 的函数,它接受两个参数,即字段名称和字段值。因此,为了填写表单字段,您必须知道确切的表单字段名称。

实现细节

我们经常遇到需要填写在某些工具(如 Adobe Designer)中创建的表单的场景,而我们不确定表单字段名称。因此,为了填写表单字段,我们首先需要读取所有 Pdf 表单字段的名称。Form 类提供名为 FieldNames 的属性,该属性返回所有字段的名称,如果 PDF 不包含任何字段,则返回 null。然而,在使用此属性时,我们会获得 PDF 表单中所有字段的名称,我们可能不确定哪个名称对应于表单上的哪个字段。

作为解决此问题的方案,我们将使用每个字段的外观属性。Form 类有一个名为 GetFieldFacade 的函数,该函数返回属性,包括位置、颜色、边框样式、字体、列表项等。为了保存这些值,我们需要使用 FormFieldFacade 类,该类用于记录字段的视觉属性。一旦我们拥有这些属性,我们可以在每个字段下方添加一个文本字段,以显示字段名称。

Aspose.Pdf.Facades 命名空间中,我们有一个名为 FormEditor 的类,该类提供操作 PDF 表单的能力。打开一个 pdf 表单;在每个现有表单字段下方添加一个文本字段,并使用新名称保存 Pdf 表单。

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void IdentifyFormFieldsNames()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdfFacades_TechnicalArticles();
    // First a input pdf file should be assigned
    var form = new Aspose.Pdf.Facades.Form(dataDir + "FilledForm.pdf");
    // Get all field names
    var allfields = form.FieldNames;
    // Create an array which will hold the location coordinates of Form fields
    var box = new System.Drawing.Rectangle[allfields.Length];
    for (int i = 0; i < allfields.Length; i++)
    {
        // Get the appearance attributes of each field, consequtively
        var facade = form.GetFieldFacade(allfields[i]);
        // Box in FormFieldFacade class holds field's location
        box[i] = facade.Box;
    }
    // Save PDF document
    form.Save(dataDir + "IdentifyFormFields_1_out.pdf");

    // Create PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "FilledForm - 2.pdf"))
    {
        // Now we need to add a textfield just upon the original one
        using (var editor = new Aspose.Pdf.Facades.FormEditor(document))
        {
            for (int i = 0; i < allfields.Length; i++)
            {
                // Add text field beneath every existing form field
                editor.AddField(Aspose.Pdf.Facades.FieldType.Text, 
                "TextField" + i, allfields[i], 1, 
                box[i].Left, box[i].Top, box[i].Left + 50, box[i].Top + 10);
            }
            // Save PDF document
            editor.Save(dataDir + "IdentifyFormFields_out.pdf");
        }
    }
}