2009-04-21 16 views
32

मैं रूबी (लिनक्स और ओएसएक्स पर) में बड़ी पीडीएफ फाइलों को पढ़ने/विश्लेषण करने के लिए एक तेज़ और विश्वसनीय तरीका ढूंढ रहा हूं।रूबी: पीडीएफ फाइलें पढ़ना

अब तक मुझे पुराना और सरल PDF-toolkit (pdftotext -wrapper) और PDF-reader मिला है, जो मेरी अधिकांश फ़ाइलों को पढ़ने में असमर्थ था। हालांकि दो पुस्तकालय वास्तव में कार्यक्षमता प्रदान करते हैं जो मैं ढूंढ रहा था।

मेरा प्रश्न: क्या मुझे कुछ याद आया है? क्या कोई ऐसा उपकरण है जो मेरी समस्या को हल करने के लिए बेहतर अनुकूल (तेज और अधिक विश्वसनीय) है?

+0

[रूबी पीडीएफ-पार्सिंग मणि/लाइब्रेरी] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/320621/ruby-pdf-parsing-gem-library) –

उत्तर

24

आप Docsplit उपयोगी लग सकते:

Docsplit एक कमांड लाइन उपयोगिता और अलग बंटवारे उनके घटक भागों में दस्तावेज़ों के लिए रूबी पुस्तकालय है: खोजा UTF-8 सादा पाठ, पेज छवियों या किसी भी प्रारूप में थंबनेल, पीडीएफ, एकल पेज, और दस्तावेज़ मेटाडाटा (शीर्षक, लेखक, पृष्ठों की संख्या ...)

+1

जेवियर: डॉक्सप्लिट पर एक नज़र डालें। यह टेक्स्ट निष्कर्षण के लिए अपाचे पीडीएफबॉक्स लाइब्रेरी को लपेटता है - क्योंकि हमारे पास पीडीएफबॉक्स के साथ बेहतर गुणवत्ता वाले परिणाम हैं जो pdftotext। – jashkenas

+0

@pw। सभी पुस्तकालयों को स्थापित किया और इसके लिए सभी दस्तावेजों का पालन किया, हालांकि मुझे कठिन समय था, क्या आपके पास ट्यूटोरियल या दस्तावेज़ीकरण के लिए कोई रेफ़रल है जो कोड की 2 पंक्तियों से परे है? –

+0

डॉक्सप्लिट वास्तव में अच्छा है लेकिन यह अब बनाए रखा नहीं है – Magnum

0

यहां कुछ विकल्प है: http://pdftohtml.sourceforge.net/

पर निर्भर करता है:

http://en.wikipedia.org/wiki/List_of_PDF_software

उस लिंक से

, और खोज sourceforge, वहाँ कमांड लाइन उपयोगिताओं की एक जोड़ी है कि तुम क्या चाहते हो सकता है, यह एक तरह है आपकी आवश्यकताओं और पीडीएफ क्या दिखते हैं, आप Google डॉक्स एपीआई (पीडीएफ अपलोड करना और फिर इसे टेक्स्ट के रूप में डाउनलोड करना) का उपयोग कर सकते हैं, या gocr जैसे कुछ भी कोशिश कर सकते हैं। मेरे पास अतीत में गोक्र के साथ छवि पाठ को बहुत अधिक भाग्य मिला है, और आपको इसे करने के लिए खोलने के लिए केवल gocr -i whatever.pdf (मुझे लगता है कि यह पीडीएफ के साथ काम करता है)।

इनमें से सभी का नकारात्मक पक्ष यह है कि वे शुद्ध-रूबी कार्यान्वयन नहीं हैं, लेकिन बहुत अच्छी (और मुक्त) ओसीआर परियोजनाएं इस तरह से की जाती हैं।

+2

मुझे ओसीआर ("ऑप्टिकल कैरेक्टर रिकॉग्नाइजेशन") एक पीडीएफ पढ़ने के लिए जिसमें स्कैन किए गए पाठ शामिल नहीं हैं? क्या वह पूरी प्रक्रिया को अनावश्यक रूप से धीमा नहीं करेगा? – Javier

+1

सं। ओसीआर छवियों को पाठ में परिवर्तित करने की प्रक्रिया है। पीडीएफ पाठकों और पीडीएफ टूलकिट इस अवधारणा का उपयोग एक छवि को परिवर्तित करने के लिए करते हैं (वही है जो आउटपुट से कहता है, कहता है, एक स्कैनर) पाठ में। – Terry

+1

तो मूल रूप से आप कह रहे हैं कि पीडीएफ के अंदर सभी पाठों में एक छवि होती है जिसे पहले पाठ के रूप में पहचाना जाना चाहिए? – Javier

1

आप जेआरबी और जावा पीडीएफ लाइब्रेरी पार्सर जैसे अपाचेपीडीएफबॉक्स (https://www.ohloh.net/p/pdfbox) का उपयोग कर सकते हैं। http://java-source.net/open-source/pdf-libraries भी देखें।

+0

या iText, http://www.lowagie.com/iText/। –

+0

यह एक दिलचस्प विकल्प की तरह लगता है। क्या आपने कहीं कार्यान्वयन या उदाहरण देखा है? – Javier

+0

@nemo: iText? मैं पीडीएफ पढ़ने की कोशिश कर रहा हूं, उन्हें उत्पन्न नहीं कर रहा हूं। – Javier

2

विभिन्न तरीकों का प्रयास करने के बाद, मैं अब PDF-Toolkit का उपयोग कर रहा हूं। यह काफी पुराना है, लेकिन यह तेज़, स्थिर और भरोसेमंद है। इसके अलावा, इसे वास्तव में नया होने की आवश्यकता नहीं है, क्योंकि यह केवल xpdf commandline utilities को लपेटता है।

0

यदि आपको केवल पीडीएफ फ़ाइल से टेक्स्ट सामग्री प्राप्त करने की आवश्यकता है, तो Sourceforge पर pdftohtml कुशल है। यह छवियों से निपटने के लिए उपयुक्त नहीं है।

0

क्या आपने CombinePDF लाइब्रेरी पर एक नज़र डाली है?

यह एक शुद्ध रूबी समाधान है जो कुछ पीडीएफ हेरफेर की अनुमति देता है, जैसे पृष्ठों को निकालने, एक पीडीएफ पेज को दूसरे पर ओवरले करना, पेज नंबरिंग, मूल पाठ और तालिकाओं आदि लिखना।

लोगो के साथ मौजूदा पीडीएफ फ़ाइल को स्टंप करने के लिए यहां एक उदाहरण दिया गया है। उदाहरण एक पीडीएफ फ़ाइल पढ़ता है, एक पृष्ठ को एक टिकट के रूप में उपयोग करने के लिए निकालता है और एक और पीडीएफ फ़ाइल टिकट देता है।

require 'combine_pdf' 
company_logo = CombinePDF.load("company_logo.pdf").pages[0] 
pdf = CombinePDF.load "content_file.pdf" 
pdf.pages.each {|page| page << company_logo} 
pdf.save "content_with_logo.pdf" 

आप पाठ, संख्या पृष्ठों या उपयोग पर मुहर लगा सकते हैं:

require 'combine_pdf' 

pdf = CombinePDF.load "content_file.pdf" 

pdf.number_pages #adds page numbers. you can add formatting and placement options. 

pdf.pages.each {|page| page.textbox "One Way To Stamp"} 

#you can a shortcut method to stamp pages 
pdf.stamp_pages "Another way to stamp" 

#you can use the shortcut method for both text and PDF stamps 
company_logo = CombinePDF.load("company_logo.pdf").pages[0] 
pdf.stamp_pages company_logo 

# you can use write simple tables 
pdf.pages[0].write_table headers: ['first name', 'surname'], table_data: [['John', 'Doe'], ['Mr.', 'Smith']] 

pdf.save "content_with_logo.pdf" 

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

संबंधित मुद्दे