c# - 使用 iTextSharp : empty values 读取 pdf 表单数据

标签 c# .net itext

我正在使用 iTextSharp 阅读 PDF 模块,它运行良好。我不知道为什么,但是,当我尝试使用 GetField() 方法读取 PDF 字段时,PDF 文件中正确填写的某些字段返回为空(值 =“”)。

你知道为什么吗?有没有其他方法可以从 PDF 字段中提取值?

PdfReader pdfReader = new PdfReader(new RandomAccessFileOrArray(fileName), null);
pdfFormFields = pdfReader.AcroFields;

foreach (var field in pdfFormFields.Fields) {
     _logger.Error("Field: " + field.Key + " - Value: " + pdfFormFields.GetField(field.Key.ToString()));
}

这是输出:

PDFReader.PDFRead - Field: modulo1[0].BASALE_PAG1[0].SITO_TUMORE_PRIMITIVO[0] - Value: Stomaco
PDFReader.PDFRead - Field: modulo1[0].BASALE_PAG1[0].ALTRO_SITO_TUMORE_PRIMITIVO[0] - Value: cervice
PDFReader.PDFRead - Field: modulo1[0].BASALE_PAG1[0].IST_PRIM_SECOND[0] - Value: su secondario
PDFReader.PDFRead - Field: modulo1[0].BASALE_PAG1[0].STADIAZIONE[0] - Value: IIa
PDFReader.PDFRead - Field: modulo1[0].BASALE_PAG2[0].OCTREOSCAN_Ga-PET[0] - Value: Negativo
PDFReader.PDFRead - Field: modulo1[0].BASALE_PAG2[0].FUNZIONANTE[0] - Value: No
PDFReader.PDFRead - Field: modulo1[0].BASALE_PAG2[0].CgA_INIZIO_TERAPIA[0] - Value: 1.00000000
PDFReader.PDFRead - Field: modulo1[0].BASALE_PAG2[0].CgA_VAL_RIFERIMENTO[0] - Value: 
PDFReader.PDFRead - Field: modulo1[0].BASALE_PAG2[0].ACIDO5_VAL_RIFERIMENTO[0] - Value: 

发送,
安德里亚

最佳答案

此代码应为您提供 C# 中所有字段的内容:

   public string ReadPdfFile(string fileName)
            {
                StringBuilder text = new StringBuilder();

                if (File.Exists(fileName))
                {
                    PdfReader pdfReader = new PdfReader(fileName);

                    for (int page = 1; page <= pdfReader.NumberOfPages; page++)
                    {
                        ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
                        string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);

                        currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));
                        text.Append(currentText);
                    }
                    pdfReader.Close();
                }
                return text.ToString();
            }
            private static string GetFormFieldNames(PdfReader pdfReader)
            {
                return string.Join("\r\n", pdfReader.AcroFields.Fields
                                               .Select(x => x.Key).ToArray());
            }

            private static string GetFormFieldNamesWithValues(PdfReader pdfReader)
            {
                return string.Join("\r\n", pdfReader.AcroFields.Fields
                                               .Select(x => x.Key + "=" +
                                                pdfReader.AcroFields.GetField(x.Key))
                                               .ToArray());
            }
            private void Button_Click_1(object sender, RoutedEventArgs e)
            {
               var reader = new PdfReader(@"Direction_to_your.pdf");
               AcroFields form = reader.AcroFields;
               txtBox1.Text = GetFormFieldNamesWithValues(reader); 
               reader.Close();
            }

关于c# - 使用 iTextSharp : empty values 读取 pdf 表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8522863/

相关文章:

c# - 将文本从文本文件添加到 PDF 文件

java - 使用 itext PDF 绘制双线

c# - 将派生类的列表转换为基类的列表仍然返回派生类的对象

c# - Parallel.ForEach 停止为最后几个项目并行

c# - 那么 C#4.0 代码契约真的可以做任何事吗?

c# - 从继承的 UserControl 获取初始尺寸

c# - 有没有可以自动清理 GlobalSuppressions.cs 的工具?

c# - 将 Gtk# 对话框放置在 Gtk 窗口的中心

c# - Mongodb c# 驱动程序-将 Id 复制到插入时的另一个字段

java - 将文本(数字)放置在指定位置