2014-02-21 42 views
-2

我有一个pdf文件,我需要阅读并验证其正确性,如果出现任何错误数据,应该标记该行红颜色。现在我能够阅读和验证的PDF文件的内容通过将其转换为字符串,但我不知道如何使该行彩色,假设任何错误的数据行来标记红色的颜色。所以我的问题是这样的“如何搜索PDF中的特定行内容并将该行标为彩色”。 这是我在C#代码..如何搜索PDF中的特定行内容并使用Ctext中的Itext将该行标记为彩色#

   ITextExtractionStrategy strategy = new LocationTextExtractionStrategy(); 
       string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy); 
       currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText))); 

       if (currentText.Contains("1 . 1 To Airtel Mobile") && currentText.Contains("Total")) 
       { 
        int startPosition = currentText.IndexOf("1 . 1 To Airtel Mobile"); 
        int endPosition = currentText.IndexOf("Total"); 

        string result = currentText.Substring(startPosition, endPosition - startPosition); 
        // result will contain everything from and up to the Total line 

        using (StringReader reader = new StringReader(result)) 
        { 
         // Loop over the lines in the string. 
           string[] split = line.Split(new Char[] { ' ' }); 

        } 
       } 

如果该行的内容得到确认纠正确定其他标记该行以红颜色在PDF文件

+1

您在错误地假设PDF知道行的概念。人们试图回答你之前发布的问题,但你根本不听他们的建议。例如:你被提到这个答案:http://stackoverflow.com/questions/13714605/retrieve-the-respective-coordinates-of-all-words-on-the-page-with-itextsharp/13719947#13719947但你没有对这些信息做任何事情。相反,你只是转述并转贴了你的问题。 –

+0

@BrunoLowagie谢谢先生您的宝贵意见。我想知道PDF是否知道PDF文件中搜索的内容的概念。我可以像PDF文件中的字符串内容那样搜索内容。谢谢 – Adi

+0

我已经给出在发布另一个问题之前,您应该阅读一份全面的答案。请注意,您已经收到了或多或少与mkl相同的答案(但是您忽略了它,或者您选择忽略它)。 –

回答

1

请仔细阅读张贴半重复的问题面前的文件,如:

您已收到一些非常好的反馈,例如最初删除的the answer from Nenotlep(我要求版主将其恢复)。尤其是the comment by mkl应该对你非常有用。它指的是Retrieve the respective coordinates of all words on the page with itextsharp,这正是你现在要求的,使你的问题重复(一个可能的原因,它从StackOverflow中删除)。

在他的回答中,mkl解释说你太过轻视你的任务。您应该提取TextRenderInfo对象,而不是提取纯文本。这些对象包含有关内容(实际文本)的信息以及页面上的位置。请参阅我书中第15章的ParsingHelloWorld示例。

您正在使用的方法以字符串的形式返回PDF的内容。类似result1.txt这是说,例如输出:

的Hello World

在同样的例子,我们解析当人眼看起来具有完全相同的内容不同的PDF。但是,当您解析文档,内容看起来是这样的(见result2.txt):

LD 义和 LLO 他

这样做的原因不同的是固有的PDF的性质:线条的概念并不存在:您可以以任何您想要的顺序将字符添加到页面中。你甚至不需要添加完整的单词!

当您使用GetTextFromPage()方法时,您告诉iText您不想获取有关文本位置的任何信息。 Mlk试图向你解释这一点,但我会尝试再次解释。在我的书中的例子中,我已经将RenderListener扩展名为MyTextRenderListener。现在输出如下所示(请参阅result3.txt)。

<> 
<<ld><Wor><llo><He>> 
<<Hello People>> 

这是我们在获取result2.txt时解析的同一PDF的输出。正如你所看到的,我们在前面的尝试中遗漏了你好人

这个例子很简单:它只是显示你必须将文本片段存储在PDF中。我们获得所有TextRenderInfo对象,并使用GetText()方法获取文本。我们获取文本的顺序是PDF内容流中使用的顺序。

当使用特定策略(如LocationTextExtractionStrategy)时,iText会检索所有这些对象,并使用GetBaseline()方法对所有文本片段进行排序。

<<ld><Wor><llo><He>> 

结果:

<<He><llo><Wor><ld>> 

然后iText的着眼于不同片段之间的距离。在这种情况下,iText会在<llo><Wor>代码段之间添加一个空格。

你现在正在做同样的事情:你要编写一个系统,它将检索所有的文本片段,这将要对它们进行排序,检查它们,并且基于组成的内容,你是将在这些位置添加背景。

相关问题