使用iTextSharp解析PDF,然后将特定文本提取到屏幕

时间:2017-07-24 16:03:25

标签: c# parsing pdf itext

所以我试图从PDF文件中提取某些内容。所以这是一张发票,我希望能够在PDF文件中搜索单词"发票编号:"然后"名字"并在

中提取它们
  

Console.WriteLine();

所以目前这就是我所得到的,我需要弄清楚如何进一步发展。

using iTextSharp.text.pdf;
using System.IO;
using iTextSharp.text.pdf.parser;
using System;

namespace PdfProperties
{
    class Program
    {
        static void Main(string[] args)
        {
            PdfReader reader = new PdfReader("C:/PDF/invoiceDetail.pdf");
            PdfReaderContentParser parser = new PdfReaderContentParser(reader);
            FileStream fs = new FileStream("C:/PDF/result0.txt", FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);

            SimpleTextExtractionStrategy strategy;

            string text = "";

            for (int i = 1; i <= reader.NumberOfPages; i++)
            {
                strategy = parser.ProcessContent(i, new SimpleTextExtractionStrategy());
                sw.WriteLine(strategy.GetResultantText());

                text = strategy.GetResultantText();

                String[] splitText = text.Split(new char[] {'.' });

                Console.WriteLine("Test");

                Console.WriteLine(text);
            }
            sw.Flush();
            sw.Close();

        }
    }
}

非常感谢任何帮助

2 个答案:

答案 0 :(得分:0)

HY 你可以试试这个:

String[] splitText = text.Split(".");
for(int i =0; i<splitText.Lenght;i++)
{
if(splitText[i].toString() =="Invoice Number:")
(
  // we have Invoice Number

 // now we search for First Name
   if(splitText[i].toString() == "First Name")
   (
     // now we have also First Name
   ) 
) 
}

答案 1 :(得分:0)

有两种方法可以解决这个问题:

  1. 您可以尝试自行处理发票。这意味着处理结构和处理边缘情况。如果内容不总是以相同的方式对齐怎么办?如果发票模板发生变化怎么办?如果发票中的某些文字是可变的并且您无法真正依赖于提取的精确文本,该怎么办? ..

    简而言之,这不是一个需要解决的微不足道的问题。

  2. 使用pdf2Data。它专门用于处理结构丰富的文档。像发票一样。它使用了一个名为&#34; selectors&#34;允许您定义您希望某些内容的位置。通过位置(由坐标定义的矩形中的某处)或结构块(来自此表的行)等。

    即使加载项是封闭源代码,您也可以使用试用许可证进行试用。在评估pdf2Data之后,您至少可以做出更明智的决定,决定您愿意采取哪条路线来解决这个问题。

    查看itextpdf.com/itext7/pdf2Data了解更多信息