2012-10-18 17 views
6

में पीडीएफ को टेक्स्ट फ़ाइल में कनवर्ट करने के लिए मुझे पीडीएफ फ़ाइल से टेक्स्ट पुनर्प्राप्त करना होगा। लेकिन निम्नलिखित कोड का उपयोग करके मुझे केवल खाली टेक्स्ट फ़ाइल मिलती है।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"); 
} 

मैं क्या गलत कर रहा हूं और मुझे पीडीएफ से टेक्स्ट कैसे निकालना चाहिए?

+0

कोड आप प्रत्येक मूल में से एक पृष्ठ वाला आंशिक पीडीएफ़ बनाने के लिए उपयोग iTextSharp वर्गों का उपयोग करने लगता है। दूसरी ओर वह पीडीएफपार्सर कक्षा उस पुस्तकालय से नहीं है, है ना? ये कहां से है? और आप iText में PdfTextExtrator का उपयोग क्यों नहीं करते? आपको उस मामले में दस्तावेज़ को विभाजित करने की आवश्यकता नहीं होगी। कृपया एक नमूना पीडीएफ भी प्रदान करें जो आपकी समस्याओं का उत्पादन करे। – mkl

+2

यदि वह पीडीएफपार्स http://www.codeproject.com/Articles/14170/Extract-Text-from-PDF-in-C-100-NET से है, तो आश्चर्यचकित न हों कि आपको कोई अच्छा आउटपुट नहीं मिलता --- वह पीडीएफपार्सर बहुत ही लागू किया गया है। – mkl

उत्तर

9

iTextSharp के साथ पाठ निष्कर्षण के लिए, कि पुस्तकालय के वर्तमान संस्करण लेने के लिए और का उपयोग

PdfTextExtractor.GetTextFromPage(reader, pageNumber); 

खबरदार, वहाँ कुछ 5.3.x संस्करण में पाठ निष्कर्षण कोड है जो इस बीच ट्रंक में तय किया गया है में एक बग है । इसलिए, आप ट्रंक संशोधन की जांच करना चाहेंगे।

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