Я пытаюсь выяснить, можно ли читать данные формы PDF (формы заполнены и сохранены вместе с формой) с помощью iTextSharp. Как я могу это сделать?
Как читать данные PDF-формы с помощью iTextSharp?
Ответ 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
Это очень просто.. И это работает как шарм.. :)