Заполните 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, который я пытаюсь заполнить

есть идеи?

Редактировать::

Нулевая ошибка в полях PDF

2 ответа

Решение

Как оказалось, PDF-форма для заполнения на самом деле не была формой (в терминах PDF) вообще. Таким образом, у вас есть два варианта:

  1. Вы добавляете текст к содержимому страницы напрямую, используя жестко запрограммированные или сконфигурированные положения и размеры "полей", как описано @tschmit007 в комментариях к его ответу.

  2. Вы добавляете фактические поля формы 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();
}
Другие вопросы по тегам