Я пытаюсь выяснить, можно ли читать данные формы PDF (заполненные формы и сохраненные в форме) с помощью iTextSharp. Как я могу это сделать?Как читать данные в формате PDF с помощью iTextSharp?
ответ
Вам нужно будет узнать имена полей в форме PDF. Получите поля, а затем прочитайте их значение.
string pdfTemplate = "my.pdf";
PdfReader pdfReader = new PdfReader(pdfTemplate);
AcroFields fields = pdfReader.AcroFields.Fields;
string val = fields.GetField("fieldname");
Очевидно, что в приведенном выше коде, имя поля имя поля формы PDF и метод GetField возвращает строковое представление этого значения. Here - это статья с примером кода, который вы, вероятно, могли бы использовать. Он показывает, как вы можете читать и писать поля формы с помощью iTextSharp.
Если вы используете 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-документ, «something_important.pdf».
Это, как получить доступ к каждому полю, как только вы знаете имя поля:
$PDFDoc.AcroFields.GetField("Name of the field here")
Это работало для меня! Обратите внимание на параметры при определении шаблона! '\ 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()
OP только хотел * прочитать данные в формате PDF * (и получил хороший ответ для этого). Ваш код показывает, как * изменить данные в форме PDF. * – mkl
Извините, на самом деле отправил ответ в неправильную тему ...Это означало объяснение того, как вводить значения в поля и сохранять редактирование формы, когда файл снова открывается ... – Serg
Возможно, библиотека 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.
это работает, но очень медленно, требуется более минуты, чтобы читать ~ 3000 полей. Кто-нибудь знает более быстрый способ перечислить их? Я пытался сделать это параллельно, но это, похоже, не помогло. – DLeh
Название 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
Это очень просто .. И это работает как шарм .. :)
это работает как шарм ... Интересно, почему я не смотрел в эту функцию .. когда Я пробовал каждую другую функцию :). Большое спасибо .. я спас мои выходные. – Bhuvan
Объявление о государственной службе: Следующий код не даст вам то, что вы хотите: 'pdfReader.AcroFields.Fields [" fieldName "]. Value'. Я потратил несколько часов, прежде чем нашел этот пост. –
Привет. Я думаю, что есть ошибка в третьей строке вашего примера. Правильная форма: 'AcroFields fields = pdfReader.AcroFields;' – cesAR