Похоже, cards[]
является массивом String, и вы пытаетесь преобразовать Ace of Clubs
в Integer.
int first_value = Integer.parseInt(cards[index]);
Вам нужно будет узнать имена полей в форме PDF. Получите поля и затем прочитайте их значение.
string pdfTemplate = "my.pdf";
PdfReader pdfReader = new PdfReader(pdfTemplate);
AcroFields fields = pdfReader.AcroFields.Fields;
string val = fields.GetField("fieldname");
Очевидно, что в приведенном выше коде имя поля - это имя поля формы PDF, а метод GetField возвращает строковое представление этого значения. Здесь - статья с примером кода, который вы, вероятно, могли бы использовать. Он показывает, как вы можете читать и писать поля формы с помощью iTextSharp.
Возможно, недавно изменилась библиотека 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.
Имя 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
Это очень просто .. И это работает как шарм ..:)
Если вы используете 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()
pdfReader.AcroFields.Fields["fieldName"].Value
. Я потратил несколько часов, прежде чем нашел этот пост. – Walter Stabosz 21 June 2013 в 14:55AcroFields fields = pdfReader.AcroFields;
– cesAR 18 July 2017 в 17:43