我试图找出是否可以使用iTextSharp阅读PDF表格数据(表格填写并随表格保存)。我怎么能这样做?
答案 0 :(得分:18)
您必须在PDF表单中找到字段名称。获取字段,然后阅读它们的值。
string pdfTemplate = "my.pdf";
PdfReader pdfReader = new PdfReader(pdfTemplate);
AcroFields fields = pdfReader.AcroFields.Fields;
string val = fields.GetField("fieldname");
显然,在上面的代码中,字段名称是PDF表单字段的名称,GetField方法返回该值的字符串表示形式。 Here是一篇包含您可能使用的示例代码的文章。它显示了如何使用iTextSharp读取和写入表单字段。
答案 1 :(得分:10)
也许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 :(得分:2)
如果您使用的是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")
答案 3 :(得分:2)
这对我有用! 在定义压模时请注意参数! '\ 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()
答案 4 :(得分:1)
PDF名称是&#34; report.pdf&#34; ..
要读入TextBox1的数据字段是&#34; TextField25&#34;在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
这很简单..它就像一个魅力......:)