Bekerja dengan Formulir XFA

Kelas Form menyediakan kemampuan untuk menangani AcroForm statis dan Anda dapat mendapatkan instance bidang tertentu menggunakan metode GetFieldFacade(..) dari kelas Form. Namun, bidang XFA tidak dapat diakses melalui metode Form.GetFieldFacade(..). Sebagai gantinya, gunakan Document.Form.XFA untuk mendapatkan/mengatur nilai bidang dan memanipulasi template bidang XFA (mengatur properti bidang).

Potongan kode berikut juga bekerja dengan pustaka Aspose.PDF.Drawing.

Isi bidang XFA

Potongan kode berikut menunjukkan kepada Anda cara mengisi bidang dalam formulir XFA.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void FillXFAFields()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_Forms();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "FillXFAFields.pdf"))
    {
        // Get names of XFA form fields
        var names = document.Form.XFA.FieldNames;

        // Set field values
        if (names.Length > 0)
        {
            document.Form.XFA[names[0]] = "Field 0";
        }
        if (names.Length > 1)
        {
            document.Form.XFA[names[1]] = "Field 1";
        }

        // Save PDF document
        document.Save(dataDir + "FilledXfa_out.pdf");
    }
}

Konversi XFA-ke-Acroform

Formulir dinamis didasarkan pada spesifikasi XML yang dikenal sebagai XFA, “Arsitektur Formulir XML”. Informasi tentang formulir (sejauh PDF bersangkutan) sangat samar – ia menyatakan bahwa bidang ada, dengan properti, dan peristiwa JavaScript, tetapi tidak menentukan rendering apa pun.

Saat ini, PDF mendukung dua metode berbeda untuk mengintegrasikan data dan formulir PDF:

  • AcroForms (juga dikenal sebagai formulir Acrobat), diperkenalkan dan disertakan dalam spesifikasi format PDF 1.2.
  • Formulir Arsitektur Formulir XML Adobe (XFA), diperkenalkan dalam spesifikasi format PDF 1.5 sebagai fitur opsional (Spesifikasi XFA tidak termasuk dalam spesifikasi PDF, hanya dirujuk.)

Kami tidak dapat mengekstrak atau memanipulasi halaman dari Formulir XFA, karena konten formulir dihasilkan pada waktu berjalan (selama tampilan formulir XFA) dalam aplikasi yang mencoba menampilkan atau merender formulir XFA. Aspose.PDF memiliki fitur yang memungkinkan pengembang untuk mengonversi formulir XFA ke AcroForms standar.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ConvertDynamicXFAToAcroForm()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_Forms();

    // Load dynamic XFA form
    using (var document = new Aspose.Pdf.Document(dataDir + "DynamicXFAToAcroForm.pdf"))
    {
        // Set the form fields type as standard AcroForm
        document.Form.Type = Aspose.Pdf.Forms.FormType.Standard;

        // Save PDF document
        document.Save(dataDir + "StandardAcroForm_out.pdf");
    }
}

Dapatkan properti bidang XFA

Untuk mengakses properti bidang, pertama gunakan Document.Form.XFA.Template untuk mengakses template bidang. Potongan kode berikut menunjukkan langkah-langkah untuk mendapatkan koordinat X dan Y dari bidang formulir XFA.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void GetXFAProperties()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_Forms();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "GetXFAProperties.pdf"))
    {
        // Get names of XFA form fields
        var names = document.Form.XFA.FieldNames;

        // Set field values
        if (names.Length > 0)
        {
            document.Form.XFA[names[0]] = "Field 0";
        }
        if (names.Length > 1)
        {
            document.Form.XFA[names[1]] = "Field 1";
        }

        // Get field position
        if (names.Length > 0)
        {
            Console.WriteLine(document.Form.XFA.GetFieldTemplate(names[0]).Attributes["x"].Value);
            Console.WriteLine(document.Form.XFA.GetFieldTemplate(names[0]).Attributes["y"].Value);
        }

        // Save PDF document
        document.Save(dataDir + "FilledXfa_out.pdf");
    }
}