Как читать данные PDF-формы с помощью iTextSharp? - PullRequest
14 голосов
/ 30 июля 2010

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

Ответы [ 5 ]

18 голосов
/ 30 июля 2010

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

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

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

10 голосов
/ 15 октября 2014

Возможно, библиотека 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.

2 голосов
/ 03 сентября 2013

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

            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()
2 голосов
/ 21 августа 2013

Если вы используете 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")
1 голос
/ 11 мая 2015

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...