Заполните PDF-форму с помощью Itextsharp
Я пытаюсь заполнить форму с помощью ITextsharp и пробую следующий код, чтобы получить все поля в pdf:
string pdfTemplate = @"c:\Temp\questionnaire.pdf";
PdfReader pdfReader = new PdfReader(pdfTemplate);
StringBuilder sb = new StringBuilder();
foreach (var de in pdfReader.AcroFields.Fields)
{
sb.Append(de.Key.ToString() + Environment.NewLine);
}
Но цикл foreach всегда равен нулю. Нужно ли что-то делать, чтобы подать сам файл, как я попробовал пример отсюда, и он работает нормально... это пример PDF, который я пытаюсь заполнить
есть идеи?
Редактировать::
2 ответа
Как оказалось, PDF-форма для заполнения на самом деле не была формой (в терминах PDF) вообще. Таким образом, у вас есть два варианта:
Вы добавляете текст к содержимому страницы напрямую, используя жестко запрограммированные или сконфигурированные положения и размеры "полей", как описано @tschmit007 в комментариях к его ответу.
Вы добавляете фактические поля формы PDF в свой PDF, чтобы создать настоящую форму PDF, которую вы берете в качестве шаблона для заполнения позже.
Вы можете добавить фактические поля формы либо с помощью некоторого графического инструмента, например Adobe Acrobat, либо использовать iText(Sharp). Взгляните на главу 8 iText в действии - 2-е издание и примеры, доступные здесь для Java и здесь для.Net.
Эти примеры в основном добавляют поля формы во вновь создаваемые документы PDF. Тем не менее, вы можете фактически использовать тот же код для добавления полей формы в PdfStamper, который предоставляет свой внутренний PdfWriter, используя stamper.getWriter()
в Java и stamper.Writer
в C#. Вместо writer.addAnnotation(field)
ты должен использовать stamper.addAnnotation(field, page)
, хоть.
Пытаться:
using (FileStream outFile = new FileStream("result.pdf", FileMode.Create)) {
PdfReader pdfReader = new PdfReader("file.pdf");
PdfStamper pdfStamper = new PdfStamper(pdfReader, outFile);
AcroFields fields = pdfStamper.AcroFields;
//rest of the code here
//fields.SetField("n°1", "value");
//...
pdfStamper.Close();
pdfReader.Close();
}