如何使用iTextSharp阅读PDF表格数据?

时间:2010-07-29 22:13:36

标签: c# forms pdf itext

我试图找出是否可以使用iTextSharp阅读PDF表格数据(表格填写并随表格保存)。我怎么能这样做?

5 个答案:

答案 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

这很简单..它就像一个魅力......:)