2012-10-18 23 views
6

Muszę pobrać tekst z pliku PDF. Ale używając poniższego kodu otrzymuję tylko pusty plik tekstowy.Jak przekonwertować plik PDF na plik tekstowy w iTextSharp

for (int i = 0; i < n; i++) 
{ 
    pagenumber = i + 1; 
    filename = pagenumber.ToString(); 
    while (filename.Length < digits) filename = "0" + filename; 
    filename = "_" + filename; 
    filename = splitFile + name + filename; 
    // step 1: creation of a document-object 
    document = new Document(reader.GetPageSizeWithRotation(pagenumber)); 
    // step 2: we create a writer that listens to the document 
    PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(filename + ".pdf", FileMode.Create)); 

    // step 3: we open the document 
    document.Open(); 

    PdfContentByte cb = writer.DirectContent; 
    PdfImportedPage page = writer.GetImportedPage(reader, pagenumber); 
    int rotation = reader.GetPageRotation(pagenumber); 
    if (rotation == 90 || rotation == 270) 
    { 
     cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(pagenumber).Height); 
    } 
    else 
    { 
     cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); 
    } 
    // step 5: we close the document 

    document.Close(); 
    PDFParser parser = new PDFParser(); 
    parser.ExtractText(filename + ".pdf", filename + ".txt"); 
} 

Co robię źle i jak wyodrębnić tekst z pliku PDF?

+0

Kod używany do tworzenia częściowych plików PDF zawierających jedną stronę oryginału wydaje się wykorzystywać klasy iTextSharp. Z drugiej strony, że klasa PdfParser nie pochodzi z tej biblioteki, prawda? Skąd to jest? I dlaczego nie używasz PdfTextExtrator w iText? Nie musiałbyś dzielić dokumentu tak, jak robisz w tym przypadku. Proszę również dostarczyć przykładowy plik PDF, który spowoduje problemy. – mkl

+2

Jeśli ten PdfParser pochodzi z http://www.codeproject.com/Articles/14170/Extract-Text-from-PDF-in-C-100-NET, nie zdziw się, że nie masz dobrej wydajności - że PdfParser jest bardzo naiwny. – mkl

Odpowiedz

9

Do ekstrakcji tekstu z iTextSharp, wziąć aktualną wersję tej biblioteki i używać

PdfTextExtractor.GetTextFromPage(reader, pageNumber); 

Uważaj, nie jest to błąd w kodzie ekstrakcji tekstu w niektórych wersji 5.3.x, który w międzyczasie został ustalony w bagażniku . Dlatego możesz chcieć sprawdzić wersję bagażnika.

3
using System; 
using System.IO; 
using System.Linq; 
using System.Text; 
using iTextSharp.text.pdf; 
using iTextSharp.text.pdf.parser; 

namespace Pdf2Text 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      if (!args.Any()) return; 

      var file = args[0]; 
      var output = Path.ChangeExtension(file, ".txt"); 
      if (!File.Exists(file)) return; 

      var bytes = File.ReadAllBytes(file); 
      File.WriteAllText(output, ConvertToText(bytes), Encoding.UTF8); 
     } 

     private static string ConvertToText(byte[] bytes) 
     { 
      var sb = new StringBuilder(); 

      try 
      { 
       var reader = new PdfReader(bytes); 
       var numberOfPages = reader.NumberOfPages; 

       for (var currentPageIndex = 1; currentPageIndex <= numberOfPages; currentPageIndex++) 
       { 
        sb.Append(PdfTextExtractor.GetTextFromPage(reader, currentPageIndex)); 
       } 
      } 
      catch (Exception exception) 
      { 
       Console.WriteLine(exception.Message); 
      } 

      return sb.ToString(); 
     } 
    } 
} 
Powiązane problemy