Подтвердить что ты не робот

Как читать данные PDF-формы с помощью iTextSharp?

Я пытаюсь выяснить, можно ли читать данные формы PDF (формы заполнены и сохранены вместе с формой) с помощью iTextSharp. Как я могу это сделать?

4b9b3361

Ответ 1

Вы должны были бы узнать имена полей в PDF-форме. Получите поля и затем прочитайте их значение.

string pdfTemplate = "my.pdf";
PdfReader pdfReader = new PdfReader(pdfTemplate);
AcroFields fields = pdfReader.AcroFields.Fields;
string val = fields.GetField("fieldname");

Очевидно, что в приведенном выше коде имя поля - это имя поля формы PDF, а метод GetField возвращает строковое представление этого значения. Здесь - статья с примером кода, который вы, вероятно, могли бы использовать. Он показывает, как вы можете как читать, так и записывать поля формы, используя iTextSharp.

Ответ 2

Возможно, библиотека iTextSharp недавно изменилась, но я не смог получить принятый ответ для работы. Вот мое решение:

var pdf_filename = "pdf2read.pdf";
using (var reader = new PdfReader(pdf_filename))
{
    var fields = reader.AcroFields.Fields;

    foreach (var key in fields.Keys)
    {
        var value = reader.AcroFields.GetField(key);
        Console.WriteLine(key + " : " + value);
    }
}

Очень тонкое различие, потому что reader.AcroFields.Fields возвращает IDictionary вместо просто объекта AcroFields.

Ответ 3

Если вы используете Powershell, код обнаружения для полей:

    Add-Type -Path C:\Users\Micah\Desktop\PDF_Test\itextsharp.dll
    $MyPDF = "C:\Users\Micah\Desktop\PDF_Test\something_important.pdf"
    $PDFDoc = New-Object iTextSharp.text.pdf.pdfreader -ArgumentList $MyPDF
    $PDFDoc.AcroFields.Fields

Этот код даст вам имена всех полей в PDF-документе, "thing_important.pdf ".

Вот как вы получаете доступ к каждому полю, когда знаете его имя:

    $PDFDoc.AcroFields.GetField("Name of the field here")

Ответ 4

Это сработало для меня! Обратите внимание на параметры при определении штампа! '\ 0', верно

            string TempFilename = Path.GetTempFileName();

            PdfReader pdfReader = new PdfReader(FileName);
            //PdfStamper stamper = new PdfStamper(pdfReader, new FileStream(TempFilename, FileMode.Create));
            PdfStamper stamper = new PdfStamper(pdfReader, new FileStream(TempFilename, FileMode.Create), '\0', true);

            AcroFields fields = stamper.AcroFields;
            AcroFields pdfFormFields = pdfReader.AcroFields;

            foreach (KeyValuePair<string, AcroFields.Item> kvp in fields.Fields)
            {
                string FieldValue = GetXMLNode(XMLFile, kvp.Key);
                if (FieldValue != "")
                {
                    fields.SetField(kvp.Key, FieldValue);
                }
            }

            stamper.FormFlattening = false;
            stamper.Close();
            pdfReader.Close()

Ответ 5

PDF файл называется "report.pdf".

Поле данных для чтения в TextBox1 - это "TextField25" в PDF.

        Dim pdf As String = "report.pdf"
        Dim reader As New PdfReader(pdf)
        Dim fields As AcroFields = reader.AcroFields
        TextBox1.Text = fields.GetField("TextField25")

Важное примечание: это можно использовать ТОЛЬКО , ЕСЛИ PDF не сгладится (это означает, что поля должны редактироваться), когда он был создан с использованием iTextSharp..

т.е.

       pdfStamper.FormFlattening = False

Это очень просто.. И это работает как шарм.. :)