如何从PDF中提取所有值?

时间:2019-08-30 18:56:58

标签: c# itext7

我有一个可行的解决方案,可以打开PDF文件并获取文本。不幸的是,我需要的值在表单字段中。我尝试了几种获取值的方法,但是我只能获取看起来是表单名称的内容。键值正确,但是接收到的值不正确。

  

键值返回的公司名称iText.Forms.Fields.PdfTextFormField   电话号码iText.Forms.Fields.PdfTextFormField业务联系人   数据iText.Forms.Fields.PdfTextFormField字段名称   iText.Forms.Fields.PdfTextFormField

不返回表单字段中的值。有更好的方法吗?

using System;
using System.Collections.Generic;
using iText.Forms;
using iText.Forms.Fields;
using iText.Kernel.Pdf;

namespace ConsoleApplication1 {
    class Class1 {      
        public string pdfthree(string pdfPath) {            
            PdfReader reader = new PdfReader(pdfPath);
            PdfDocument document = new PdfDocument(reader);
            PdfAcroForm acroForm = PdfAcroForm.GetAcroForm(document, false);
            IDictionary<string, PdfFormField> Map = new Dictionary<string, PdfFormField>();

            Map = acroForm.GetFormFields();
            acroForm.GetField("Name");
            string output = "";

            foreach (String fldName in Map.Keys) {
                output += fldName + ": " + Map[fldName].ToString() + "\n";
            }

            System.IO.File.WriteAllText(pdfPath, output);
            document.Close();
            reader.Close();
            return output;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

应该调用PdfFormField#ToString()而不是调用PdfFormField#GetValueAsString()来获取字段的值。

完整代码:

using System;
using System.Collections.Generic;
using iText.Forms;
using iText.Forms.Fields;
using iText.Kernel.Pdf;

namespace ConsoleApplication1 {
    class Class1 {      
        public string pdfthree(string pdfPath) {            
            PdfReader reader = new PdfReader(pdfPath);
            PdfDocument document = new PdfDocument(reader);
            PdfAcroForm acroForm = PdfAcroForm.GetAcroForm(document, false);
            IDictionary<string, PdfFormField> Map = new Dictionary<string, PdfFormField>();

            Map = acroForm.GetFormFields();
            acroForm.GetField("Name");
            string output = "";

            foreach (String fldName in Map.Keys) {
                output += fldName + ": " + Map[fldName].GetValueAsString() + "\n";
            }

            System.IO.File.WriteAllText(pdfPath, output);
            document.Close();
            reader.Close();
            return output;
        }
    }
}