2015-06-29 2 views
0

Я пытаюсь преобразовать PDF-файл в текстовый, используя библиотеку C# iTextSharp. Мой код таков:Не удается открыть pdf с помощью iTextSharp

private void button2_Click(object sender, EventArgs e) 
     { 
      string FosPdf = @"D:\Public\temp\FOS.pdf"; 
      if (System.IO.File.Exists(FosPdf)) 
      { 
       try 
       { 
        StringBuilder text = new StringBuilder(); 
        PdfReader pdfReader = new PdfReader(FosPdf); 

        for (int page = 1; page <= pdfReader.NumberOfPages; page++) 
        { 
         ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy(); 
         string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy); 
         text.Append(System.Environment.NewLine); 
         text.Append("\n Page Number:" + page); 
         text.Append(System.Environment.NewLine); 
         currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText))); 
         text.Append(currentText); 
         pdfReader.Close(); 
        } 
        string path = @"D:\Public\temp\FOSEtest.txt"; 
        if (!System.IO.File.Exists(path)) 
        { 
         // Create a file to write to. 
         using (System.IO.StreamWriter sw = System.IO.File.CreateText(path)) 
         { 
          sw.WriteLine("Test :"); 
         } 
        } 

        pdftext.Text += text.ToString(); 
       } 
       catch (Exception ex) 
       { 
        MessageBox.Show("Error: " + ex.Message, "Error"); 
       } 
      } 
     } 

Однако программа останавливается в начале «для», когда начинается извлечение. Ошибка заключается в том, что она «Невозможно получить доступ к закрытому файлу».

Так что я предполагаю, что PdfReader должен открыть PDF-ридер, но не знает: почему?

Я также попытался оставить PDF открытым перед запуском программы, ошибка остается прежней.

Заранее спасибо за любую помощь

+0

мы имеем тот же метод в '' XmlTextReader.Read' в PdfReader'? то вы можете использовать 'while (PdfReader.Read())' –

+0

Спасибо за ваш ответ, я не стану его пытаться, так как кто-то нашел причину проблемы. –

ответ

2

в вашей для цикла, ваше заключение он

 pdfReader.Close(); 
+0

Да, но я никогда не добираюсь до этого момента, он блокируется до –

+0

@LoukoumMira Не спорь с человеком, который вам помогает. Переместите 'Close()' вне цикла и сообщите нам, если проблема решена. Ответ правильный. Ваш комментарий неверен. –

+0

@Bruno Lowagie, действительно, извините, я действительно собирался сказать, что он был прав. Так что спасибо Фредо! –

Смежные вопросы