2012-11-25 25 views
5

पर iText का उपयोग करके पीडीएफ फ़ाइल से ऑर्डर में छवियों और टेक्स्ट को निकालने के लिए कैसे करें मैंने पहले ही पीडीएफ से टेक्स्ट निकालना है लेकिन अब मैं छवियों को निकालना चाहता हूं। पहली समस्या यह है कि छवियां प्रति पृष्ठ ग्रंथों के बीच हैं। मैं क्या जानना चाहता हूं कि ऑर्डर में छवियों को कैसे निकालना है, यहां तक ​​कि फ़ाइल प्रति पृष्ठ 2 कॉलम है और यह निर्धारित करने के लिए कि पाठ में छवि कहां रखा गया है।एंड्रॉइड

यहां कुछ कोड दिए गए हैं जिन्हें मैंने आजमाया है।

छवि निष्कर्षण:

ExtractImages.java: 
public static final String RESULT = "results/part4/chapter15/Img%s.%s"; 
public void extractImages(String filename) 
    throws IOException, DocumentException { 
    PdfReader reader = new PdfReader(filename); 
    PdfReaderContentParser parser = new PdfReaderContentParser(reader); 
    MyImageRenderListener listener = new MyImageRenderListener(RESULT); 
    for (int i = 1; i <= reader.getNumberOfPages(); i++) { 
     parser.processContent(i, listener); 
    } 
} 

MyImageRenderListener: 
public MyImageRenderListener(String path) { 
    this.path = path; 
} 

public void renderImage(ImageRenderInfo renderInfo) { 
    try { 
     String filename; 
     FileOutputStream os; 
     PdfImageObject image = renderInfo.getImage(); 
     if (image == null) return; 
     filename = String.format(path, renderInfo.getRef().getNumber(), image.getFileType()); 
     os = new FileOutputStream(filename); 
     os.write(image.getImageAsBytes()); 
     os.flush(); 
     os.close(); 
    } catch (IOException e) { 
     System.out.println(e.getMessage()); 
    } 
} 

कोड प्रक्रिया पीडीएफ और छवियों के लिए चेक की सामग्री है, तो एक छवि फ़ाइल को उन छवियों (.png, .jpg, आदि) प्रस्तुत करना।

मुझे यहां मिली समस्या यह है कि यह क्रम में छवियों को निकालने नहीं है। मैं छवि को क्रम में चाहता हूं इसलिए मुझे पता चलेगा कि एक पृष्ठ और आखिरी बार कौन सी छवि आती है। मैं उसको कैसे करू? तो, क्या इसे किसी फ़ाइल में प्रस्तुत किए बिना छवियों को निकालना संभव है? छवि के साथ मेरा लक्ष्य इसे अपने एंड्रॉइड एप्लिकेशन में फ़ाइल में बदलने के बिना छवि के रूप में प्रदर्शित करना है। यदि मैं संभव नहीं हूं तो उपयोगकर्ता छवियों को हटाने के लिए चिपक जाएगा जब उपयोगकर्ता इसका उपयोग कर रहा है।

मेरा उद्देश्य एक्स्ट्राक्ट (दृश्य नहीं) पीडीएफ फ़ाइल से टेक्स्ट और छवियां और एंड्रॉइड एप्लिकेशन में इसे प्रदर्शित करने के लिए है।

+0

जैसा कि पहले किसी अन्य प्रश्न के उत्तर में बताया गया है, जिस क्रम में मानव एक पीडीएफ में तत्वों (पाठ या छवि) को देखता है, पीडीएफ में किसी भी तरह से जरूरी नहीं है। इस प्रकार, एक सामान्य पीडीएफ में पार्स की गई छवियों और पार्स किए गए टेक्स्ट से मिलान करने के लिए, आपको टेक्स्ट में एक छवि एंकर करने के लिए दोनों को अपनी स्थिति के साथ निकालना होगा और हेरिस्टिक का उपयोग करना होगा। यहां तक ​​कि यदि आप केवल फॉर्मेट करते हैं, तो छवियों को क्रम में प्राप्त करना चाहते हैं, तो आपको संरचना (multicolumnar?) निकालना/पता होना चाहिए और उस संरचना के अनुसार छवि की स्थिति का विश्लेषण करना होगा। और क्या होगा अगर दो कॉलम दस्तावेज़ में केंद्र में एक छवि हो? ;) – mkl

उत्तर

0

उच्च स्तर दृष्टिकोण:

  1. निकालने दस्तावेज़ से सभी पाठ, पढ़ने-आदेश
  2. निर्धारित वर्ण, Bigrams के वितरण पर आधारित और पाठ की भाषा के बारे में देखभाल के बिना Trigrams
  3. एक बार भाषा ज्ञात है, आप जानते हैं कि एलटीआर (बाएं से दाएं) या आरटीएल रीडिंग ऑर्डर
  4. प्रत्येक चरित्र के बाउंडिंग बक्से जैसे जानकारी का उपयोग करके, और भाषा, और फ़ॉन्ट, जोरदार रूप से पाठ की रेखाएं बनाना (एक अच्छा प्रारंभिक मीट्रिक "टी में शामिल हो सकता है यदि वे मोटे तौर पर एक ही वाई-स्थिति पर हैं और उनके एक्स-पोजिशन के बीच का अंतर औसत + std_dev रेंज के भीतर आता है)
  5. एक बार जब आप लाइनें बनाते हैं, पैराग्राफ (पहले की तरह ही समानताएं) बनाते हैं
  6. अब आपके पास पैराग्राफ हैं, और पाठ की भाषा है, आप पैराग्राफ को सही क्रम में प्रिंट कर सकते हैं।

यह कुछ है जो मैं iText पर शोध कर रहा हूं, और यह निश्चित रूप से एक छोटा काम नहीं है।

सबसे आसान समाधान टैग किए गए पीडीएफ दस्तावेज के लिए सबसे आसान समाधान है। टैग किए गए दस्तावेज़ों में जानकारी होती है कि किस दृश्य तत्व एक साथ हैं। या, इसे सरलता से रखने के लिए, आपको लाइनों और पैराग्राफ बनाने के साथ खुद को चिंता करने की ज़रूरत नहीं है, जो पहले ही हो चुका है और चिह्नित है।