Столкнулся с задачей программного заполнения полей в PDF документе. Под рукой был Aspose.PDF, поэтому воспользовался им.
В результате получили обычный XML, только беда, есть поля, которые содержат вложенные поля, к ним обратиться по имени не получится, например как изменить значение поля Text6->name2?
Для этого получим названия всех полей в PDF, для простоты выгрузим в файл fields.txt
В результате видим, что доступ к дереву полей происходит через точку, а значит полное имя поля выглядит следующим образом Text6.2
Остается только поменять значение этого поля согласно инструкции
Вся информация по работе есть в официальных гайдах Aspose, но была пара моментов, которые были не описаны.
Допустим у вас есть файл PDF с полями для заполнения, например это 3-НДФЛ с сайта налоговой.
Чтобы заполнить поле, нужно всего лишь знать его имя, а этого у нас нет, восполним пробел и выгрузим название всех полей в файл.
Aspose.Pdf.Facades.Form form = new Aspose.Pdf.Facades.Form(); form.BindPdf("
example.pdf
"); System.IO.FileStream xmlOutputStream = new FileStream("
fields.xml
", FileMode.Create); form.ExportXml(xmlOutputStream); xmlOutputStream.Close(); form.Dispose();
В результате получили обычный XML, только беда, есть поля, которые содержат вложенные поля, к ним обратиться по имени не получится, например как изменить значение поля Text6->name2?
<fields> <field name="Text6"> <field name="2">
<value>760</value>
</field> </field> </fields>
Для этого получим названия всех полей в PDF, для простоты выгрузим в файл fields.txt
Aspose.Pdf.Facades.Form form = new Aspose.Pdf.Facades.Form(); form.BindPdf("example.pdf"); string[] fields = form.FieldNames; StreamWriter sw = new StreamWriter("
fields.txt
"); foreach (string field in fields) { sw.WriteLine(field); } sw.Flush(); sw.Close();
В результате видим, что доступ к дереву полей происходит через точку, а значит полное имя поля выглядит следующим образом Text6.2
Остается только поменять значение этого поля согласно инструкции
//Create Form Object
Aspose.Pdf.Facades.Form pdfForm = new Aspose.Pdf.Facades.Form();
//Open Document
pdfForm.BindPdf("input.pdf");
pdfForm.FillField("Text6.2", "Ура, работает!");
//save updated file
pdfForm.Save("output.pdf");
Комментариев нет:
Отправить комментарий