Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Aspose.PDF for .NET используется для манипуляции PDF-документами, стандартизированными Adobe. PDF-документы содержат интерактивные формы, называемые AcroForms. Эти интерактивные формы имеют ряд полей формы, таких как комбинированный, текстовое поле и радиокнопка. Интерактивные формы Adobe и поля формы работают так же, как HTML-форма и ее поля формы.
Возможно хранить значения полей формы в отдельном файле: файле FDF (Forms Data Format). Он содержит значения полей формы в формате ключ/значение. FDF-файлы все еще используются для этой цели. Но Adobe также предоставляет XML-кодированный тип FDF, называемый XFDF. Файл XFDF хранит значения полей формы иерархически, используя XML-теги.
С помощью Aspose.PDF разработчики могут не только экспортировать значения полей формы PDF в файл FDF или XFDF, но и в файл XML. Все эти файлы используют различный синтаксис для сохранения значений полей формы PDF. Пример ниже объясняет различия.
Предположим, что есть некоторые поля формы PDF, значения которых необходимо представить в формах FDF, XML и XFDF. Эти предполагаемые поля формы с их именами и значениями показаны ниже:
Имя поля | Значение поля |
---|---|
Компания | Aspose.com |
Адрес.1 | Сидней, Австралия |
Адрес.2 | Дополнительная строка адреса |
Давайте посмотрим, как представить эти значения в форматах FDF, XML и XFDF. |
Как мы знаем, файл FDF хранит данные в формате ключ/значение, где /T представляет ключ, /V представляет значение, а данные в скобках () представляют содержимое либо ключа, либо значения. Например, /T(Компания) означает, что Компания является ключом поля, а /V(Aspose.com) предназначено для значения поля.
/T(Компания) /V(Aspose.com) /T(Адрес.1) /V(Сидней, Австралия) /T(Адрес.2) /V(Дополнительная строка адреса)
Разработчики могут представлять каждое поле формы PDF в виде тега поля, <field>
. Каждый тег поля имеет атрибут, name, показывающий имя поля, и подтаг, <value>
, представляющий значение поля, как показано ниже:
<?xml version="1.0" ?>
<fields>
<field name="Company">
<value>Aspose.com</value>
</field>
<field name="Address.1">
<value>Sydney, Australia</value>
</field>
<field name="Address.2">
<value>Additional Address Line</value>
</field>
</fields>
Представление вышеуказанных данных в форме XFDF похоже на форму XML, за исключением нескольких различий. В XFDF-файлах мы добавляем их XML-пространство имен, которое является http://ns.adpbe.com/xfdf/, и есть дополнительный тег, <f>
, который используется для указания на PDF-документ, содержащий эти поля формы PDF. Как и XML, XFDF также содержит поля в виде тегов поля, <field>
, как показано ниже:
<?xml version="1.0" encoding="UTF-8"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
<f href="CompanyForm.pdf"/>
<fields>
<field name="Company">
<value>Aspose.com</value>
</field>
<field name="Address">
<field name="1">
<value>Sydney, Australia</value>
</field>
<field name="2">
<value>Additional Address Line</value>
</field>
</field>
</fields>
</xfdf>
Aspose.PDF for .NET предоставляет возможность создавать, редактировать и заполнять уже созданные PDF-формы. Он содержит Form класс, который имеет функцию под названием FillField, и она принимает два параметра: имя поля, которое необходимо заполнить, и значение поля. Таким образом, чтобы заполнить поля формы, вы должны знать точное имя поля формы. Мы часто сталкиваемся со сценарием, в котором нам нужно заполнить форму, созданную в каком-то инструменте, например, Adobe Designer, и мы не уверены в именах полей формы. Чтобы выполнить нашу задачу, нам нужно прочитать имена всех полей формы PDF. Класс Form предоставляет свойство под названием FieldsNames, которое возвращает все имена полей и возвращает null, если в PDF нет полей. Но это свойство вернет все имена полей формы PDF, и мы не будем уверены, какое имя соответствует какому полю на форме.
В качестве решения этой проблемы нам потребуются атрибуты внешнего вида каждого поля. Класс Form имеет функцию под названием GetFieldFacade, которая возвращает атрибуты, включая местоположение, цвет, стиль границы, шрифт, элементы списка и так далее. Чтобы сохранить эти значения, мы будем использовать класс FormFieldFacade, который используется для записи визуальных атрибутов полей. Как только у нас будут эти атрибуты, мы можем добавить текстовое поле под каждым полем, которое будет отображать имя поля. Здесь возникает вопрос, как мы определим местоположение, где добавить текстовое поле? Решение этой проблемы - свойство Box в классе 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 DifferenceBetweenFile()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdfFacades_TechnicalArticles();
// First a input pdf file should be assigned
using (var form = new Aspose.Pdf.Facades.Form(dataDir + "FilledForm.pdf"))
{
// Get all field names
String[] 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, consecutively
var facade = form.GetFieldFacade(allfields[i]);
// Box in FormFieldFacade class holds field's location.
box[i] = facade.Box;
}
// Save PDF document
form.Save(dataDir + "DifferenceBetweenFile_out.pdf");
// Open 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
FormEditor 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 + "DifferenceBetweenFile_out.pdf");
}
}
}
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.