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