2009-08-09 15 views
40

हाय मुझे php (fpdf, dompdf, आदि) के लिए कई पीडीएफ जेनरेटर के बारे में पता है जो मैं जानना चाहता हूं वह एक पार्सर के बारे में है।PHP के लिए कोई पीडीएफ पार्सर है?

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

कोई सुझाव?

+2

के माध्यम से उपयोग कर सकते हैं। मैं किसी को भी एक उपहार दे रहा हूं जो हमें पीडीएफ के पाठ को निकालने के तरीके पर एक उदाहरण दे सकता है। समाधान को मुफ्त पुस्तकालयों का उपयोग करना है (कोई एक्सपीडीएफ या पीडीएफ 2 टेक्स्ट) और मंच स्वतंत्र नहीं है (जीत और यूनिक्स पर काम करना चाहिए, इसलिए कोई पीडीएफ 2 टेक्स्ट नहीं)। यह PHP के exec() या shell() फ़ंक्शन का उपयोग कर सकता है। – 2ndkauboy

+0

धन्यवाद कौ-बॉय। शायद एक बक्षीस अधिक विस्तृत उत्तरों को प्रेरित करने में मदद करेगा। – elviejo79

उत्तर

1

GhostScript या ITextSharp पर एक नज़र डालें, दोनों के विभिन्न क्रॉस-प्लेटफ़ॉर्म संस्करण हैं।

1

Zend_PdfZend Framework का हिस्सा है। उनके मार्गदर्शन कहता है:

Zend_Pdf घटक एक पीडीएफ (पोर्टेबल दस्तावेज़ स्वरूप) हेरफेर इंजन है। यह लोड हो सकता है, दस्तावेज़ बनाएं, संशोधित करें और सहेजें। इस प्रकार यह किसी भी PHP अनुप्रयोग की गतिशील रूप से द्वारा मौजूदा दस्तावेज़ों को संशोधित करने या स्क्रैच से नए उत्पन्न करने में सहायता कर सकता है।

+0

+1 - ज़ेंड फ्रेमवर्क घटक विश्वसनीय रूप से करते हैं जो वे कहते हैं कि वे करेंगे। – karim79

+5

मुझे विश्वास नहीं है कि आप Zend_Pdf –

+0

का उपयोग करके पीडीएफ फाइलों में टेक्स्ट पढ़ सकते हैं इसके अलावा Zend_Pdf पीडीएफ प्रारूप का समर्थन नहीं करता है> 1.4 –

0

यह वास्तव में पीडीएफ पीडीएफ जानकारी के उस तरह खो देता है के रूप में अंदर एक मेज नहीं हो सकता है ...

3

आप पहले से ही xPDF को देखा है? वहां एक प्रोग्राम है जिसे पीडीएफटीओटीएक्स कहा जाता है जो रूपांतरण करेगा। आप इसे PHP से कॉल कर सकते हैं और फिर पीडीएफ के पाठ संस्करण में पढ़ सकते हैं। आपको php से exec() या system() चलाने की क्षमता होगी, इसलिए यह सभी होस्ट किए गए समाधानों पर काम नहीं कर सकता है।

इसके अलावा, PHP site पर कुछ उदाहरण हैं जो पीडीएफ को पाठ में परिवर्तित करेंगे, हालांकि इसकी काफी मोटाई है। आप उन उदाहरणों में से कुछ भी कोशिश कर सकते हैं। उस PHP page पर, phpt dot org पर luc के लिए खोजें।

+0

मैंने आपकी सिफारिश के आधार पर एक्सपीडीएफ की कोशिश की, और आश्चर्यचकित हुआ कि यह कितना अच्छा काम करता है - धन्यवाद! – Tomba

0

This पीएचपी पीडीएफ पार्सर, जो दो रूपों में मौजूद है:

  1. नि: शुल्क संस्करण पीडीएफ फ़ॉर्मेट करने के लिए पीडीएफ़ अप पार्स कर सकते हैं 1.5
  2. वाणिज्यिक ऐड-ऑन (वर्तमान तक किसी भी पीडीएफ प्रारूप पार्स कर सकते हैं 1.9)
+0

वह लिंक मर चुका है, लेकिन मुझे लगता है कि यह एक कांटा है: https://github.com/mark9000/FPDI – nullability

29

मैंने पहले (इसी तरह की ज़रूरतों के लिए) लिखा है, और मैं यह कह सकता हूं: मज़े करो। यह काफी जटिल कार्य है। PDF specification बड़ा और अनावश्यक है। इसके अंदर पाठ संग्रहीत करने के कई तरीके हैं। और किकर यह है कि प्रत्येक पीडीएफ जनरेटर यह कैसे काम करता है में अलग है। तो जबकि टीएफपीडीएफ या डीओएमपीडीएफ की तरह कुछ पीडीएफ पढ़ने के लिए वास्तव में आसान बनाता है (मशीन स्टैंडपॉइंट से), एक्रोबैट कुछ वास्तव में नरक दस्तावेज बनाता है।

कारण यह है कि यह पाठ कैसे लिखता है। अधिकांश डोम आधारित रेंडरर्स - मैंने उपयोग किया है - पूरी लाइन को एक स्ट्रिंग के रूप में लिखें, और इसे एक बार रखें (जो वास्तव में पढ़ने में आसान है)। एक्रोबैट एक समय में केवल एक या शायद कुछ अक्षर लिखकर और उन्हें स्वतंत्र रूप से स्थितिबद्ध करके अधिक कुशल (और यह है) होने का प्रयास करता है। हालांकि यह वास्तव में प्रतिपादन को सरल बनाता है, यह बहुत अधिक कठिन पढ़ता है।

ऊपर की ओर, यह है कि पीडीएफ प्रारूप वास्तव में सरल है। आपके पास "ऑब्जेक्ट्स" हैं जो नियमित वाक्यविन्यास का पालन करते हैं।फिर आप सामग्री उत्पन्न करने के लिए उन्हें एक साथ जोड़ सकते हैं। विनिर्देशन फ़ाइल प्रारूप का वर्णन करने पर एक अच्छा काम करता है। लेकिन असली दुनिया पढ़ने मस्तिष्क शक्ति का एक सा लेने के लिए जा रहा है ...

सलाह के कुछ उपयोगी टुकड़े कि मैं मुश्किल तरीके से सीखना पड़ा अगर आप इसे अपने आप को लिखने के लिए जा रहे हैं:

  1. एडोब फोंट को दोबारा मानचित्र करना पसंद है। तो चरित्र 65A नहीं होगा ... आपको नक्शा वस्तु ढूंढनी होगी और यह निर्धारित करना होगा कि यह क्या कर रहा है इसके आधार पर क्या कर रहा है। और यह कुशल है क्योंकि यदि उस फ़ॉन्ट के लिए दस्तावेज़ में कोई वर्ण प्रकट नहीं होता है, तो इसमें यह शामिल नहीं होता है (यदि आप पीडीएफ को प्रोग्रामेटिक रूप से संपादित करने का प्रयास करते हैं तो जीवन को मुश्किल बना देता है) ...
  2. इसे सार के रूप में लिखें मुमकिन। प्रत्येक ऑब्जेक्ट प्रकार के लिए कक्षाएं लिखें, और प्रत्येक मूल प्रकार (तार, संख्याएं, आदि)। उन वर्गों को आपके लिए पार्स दें। वहां दोहराव का एक उचित हिस्सा होगा, लेकिन आप अंत में अपने आप को बचाएंगे जब आपको एहसास होगा कि आपको केवल एक विशिष्ट प्रकार के लिए कुछ ट्विक करने की आवश्यकता है) ...
  3. किसी विशिष्ट संस्करण या दो के लिए लिखें पीडीएफ स्पेक, और इसे लागू करें। संस्करण संख्या की जांच करें, और यदि यह आपके अपेक्षा से अधिक है, तो जमानत ... और "इसे काम करने" की कोशिश न करें। यदि आप नए संस्करणों का समर्थन करना चाहते हैं, तो विनिर्देश तोड़ें और वहां से पार्सर को अपग्रेड करें। परीक्षण करने की कोशिश न करें और अपना रास्ता खराब करें (यह मजेदार नहीं है) ...
  4. संपीड़ित धाराओं के साथ शुभकामनाएँ। मैंने पाया है कि आम तौर पर आप लंबे समय तक तर्कों पर भरोसा नहीं कर सकते कि यह सत्यापित करने के लिए कि आप असम्पीडित क्यों हैं। कभी-कभी (कुछ जनरेटर के लिए) यह अच्छी तरह से काम करता है ... दूसरों को यह एक या एक से अधिक बाइट्स से दूर है। यदि फ़िल्टर मेल खाता है, तो मैं इसे डिफ्लेट करने का प्रयास करता हूं, और उसके बाद लंबाई को बल देता हूं ...
  5. लंबाई परीक्षण करते समय strlen का उपयोग न करें। mb_strlen($string, '8bit') का उपयोग करें क्योंकि यह विभिन्न वर्ण सेटों की क्षतिपूर्ति करेगा (और अन्य वर्णमाला में संभावित रूप से अमान्य वर्णों की अनुमति देगा)।

अन्यथा, भाग्य का सबसे अच्छा ...

+2

+1 मैं इसे दुःस्वप्न भी कह सकता हूं। कल्पना बहुत बड़ी है, एक पीडीएफ फाइल लगभग फाइल सिस्टम के समान ही कई विकल्पों और विकल्पों के साथ दिखती है ... आप निश्चित रूप से देख सकते हैं कि वे वहां जेल तोड़ने की क्षमता कैसे छिपा सकते हैं। – Rudu

+2

क्या आप एडोब से कम कुछ उम्मीद करेंगे? – bpeterson76

+0

@ bpeterson76, हाँ .. मैं नहीं चाहता कि मेरे पीडीएफ डाउनलोड करने योग्य हों :( –

17

मैं PDFBox कि (http://pdfbox.apache.org/) के लिए इस्तेमाल करते हैं। यह सॉफ्टवेयर javabased और मंच स्वतंत्र है। यह तेजी से और भरोसेमंद काम करता है। आप इसे निष्पादन या खोल निष्पादन या PHP/जावा-ब्रिज (http://php-java-bridge.sourceforge.net/)

+1

बहुत बहुत धन्यवाद, यही वही है जो मैं खोज रहा था! – 2ndkauboy

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