2010-09-13 2 views
2

сначала извините меня за мой плохой английский! Я хочу найти в pdf документ для слова типа «Привет». Поэтому я должен прочитать каждую страницу в формате pdf от PdfTextExtractor. Я сделал это хорошо. Я могу читать все слова на каждой странице отдельно и сохранять их в строчном буфере. , но когда я нажимаю этот код в цикле For (например, со страницы 1 на 7 для поиска в нем), слова предыдущей страницы останутся в буфере строк. Я хожу, что вы понимаете мою проблему. Tanx все. это мой код:Проблема с PdfTextExtractor в itext!

 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(); 

}

ответ

5

SimpleTextExtractionStrategy не позволяет восстановить его, к сожалению, так что вы должны переместить «новый SimpleTextExtractionStrategy()» в цикле вместо повторного использования того же объекта.

2

Существует еще одна потенциальная проблема в операторе, который контролирует свой цикл:

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

Если Pagen = 1, то цикл не выполняется вообще. Должно быть:

for (int i = 1; i <= pagen; i++) 
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; 
    } 

Этот код очень полезно читать Pdf с помощью IText

+0

Что такое линия "s = Encoding.UTF8.GetString (..." намеревался сделать –

+0

@? ThomasS, хороший вопрос! Похоже, что он кодирует текст, меняет кодировку и расшифровывает его, другими словами, вероятно, ничего полезного. – Sam

+0

@ThomasS: Я использовал эту строку кода, потому что пытался читать персидские символы. – 2014-07-21 20:58:26