تحديد أسماء حقول النموذج

Aspose.PDF for .NET يوفر القدرة على إنشاء وتحرير وملء نماذج PDF التي تم إنشاؤها مسبقًا. تحتوي مساحة أسماء Aspose.Pdf.Facades على فئة Form ، والتي تحتوي على دالة تسمى FillField وتأخذ وسيطين وهما اسم الحقل وقيمة الحقل. لذلك، لملء حقول النموذج، يجب أن تكون على دراية باسم حقل النموذج الدقيق.

تفاصيل التنفيذ

غالبًا ما نواجه سيناريو حيث نحتاج إلى ملء النموذج الذي تم إنشاؤه في أداة ما، مثل Adobe Designer، ولسنا متأكدين من أسماء حقول النموذج. لذلك، لملء حقول النموذج، نحتاج أولاً إلى قراءة أسماء جميع حقول نموذج PDF. توفر فئة Form خاصية تسمى FieldNames التي تعيد أسماء جميع الحقول وتعيد null إذا لم يحتوي PDF على أي حقل. ومع ذلك، عند استخدام هذه الخاصية، نحصل على أسماء جميع الحقول في نموذج 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");
        }
    }
}