четверг, 21 апреля 2016 г.

Aspose.PDF обновление полей

Столкнулся с задачей программного заполнения полей в PDF документе. Под рукой был Aspose.PDF, поэтому воспользовался им.

Вся информация по работе есть в официальных гайдах 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");  



Комментариев нет:

Отправить комментарий