在itext中使用PdfTextExtractor的问题!

时间:2010-09-13 21:21:32

标签: c# search itextsharp

首先请原谅我的英语不好! 我想在pdf文档中搜索“Hello”这样的单词。所以我必须通过PdfTextExtractor阅读pdf中的每一页。我做得很好。我可以分别读取每个页面中的所有单词,并将其保存在字符串缓冲区中。 但是当我在For循环中推送此代码时(例如从第1页到第7页进行搜索),前一页的单词将保留在字符串缓冲区中。我跳了解你的问题。 Tanx全部。 这是我的代码:

        PdfReader reader2 = new PdfReader(openFileDialog1.FileName);
        int pagen = reader2.NumberOfPages;
        reader2.Close();
        ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy();
        for (int i = 1; i < pagen; i++)
        {
            textBox1.Text = "";
            PdfReader reader = new PdfReader(openFileDialog1.FileName);

            String  s = PdfTextExtractor.GetTextFromPage(reader, i, its);
            //MessageBox.Show(s.Length.ToString());
            //PdfTextArray h = new PdfTextArray(s);

            //
            // s = "";
            s = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(s)));
            textBox1.Text = s;
            reader.Close();

}

3 个答案:

答案 0 :(得分:5)

SimpleTextExtractionStrategy不允许你重置它,所以你必须在循环中移动你的“new SimpleTextExtractionStrategy()”而不是重用同一个对象。

答案 1 :(得分:2)

控制循环的语句中还有另一个潜在的问题:

for (int i = 1; i < pagen; i++)

如果pagen = 1,则根本不执行循环。它应该是:

for (int i = 1; i <= pagen; i++)

答案 2 :(得分:0)

public string ReadPdfFile(object Filename,DataTable ReadLibray)
    {
     PdfReader reader2 = new PdfReader((string)Filename);
     string strText = string.Empty;

     for (int page = 1; page <= reader2.NumberOfPages; page++)
     {
         ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy();       
         PdfReader reader = new PdfReader((string)Filename);  
         String  s = PdfTextExtractor.GetTextFromPage(reader, page, its);

         s = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(s)));
         strText = strText + s;
         reader.Close(); 
      }
      return strText;
    }

此代码非常有助于使用itext读取PDf