प्रोग्रामर के दृष्टिकोण से पीडीएफ

मैं पीडीएफ के साथ न केवल एक उपयोगकर्ता के रूप में व्यवहार करता हूं, बल्कि, सबसे पहले, सॉफ्टवेयर के एक डेवलपर के रूप में जो इसे पढ़ और लिख सकता है (आप एबीबीवाई उत्पादों में आ सकते हैं जो पीडीएफ के साथ काम करते हैं - एबीबीवाई फाइनरीडर, एबीबीवाई पीडीएफ ट्रांसफार्मर)। मुझे लगता है कि आप लेख habrahabr.ru/company/abbyy/blog/105006 पढ़ते हैं और फिर मैं केवल पीडीएफ की कुछ विशेषताओं और सीमाओं के बारे में लिखता हूं, जो उन्नत उपयोगकर्ताओं के लिए अधिक दिलचस्प हैं। मैंने किसी भी जटिल तकनीकी विवरण को नहीं छुआ, इसलिए यह उन प्रोग्रामर के लिए बेहतर है जो www.adobe.com/devnet/pdf/pdf_reference_archive.html :) से विनिर्देशन संस्करण 1.7 पढ़ने के लिए पीडीएफ पढ़ना या लिखना सीखना चाहते हैं।

पीडीएफ का उद्देश्य और विशेषताएं

प्रारंभ में, पीडीएफ प्रारूप को पिछली शताब्दी के 80 के दशक के उत्तरार्ध में एडोब द्वारा पृष्ठ-संरचित दस्तावेजों की "इलेक्ट्रॉनिक हार्ड कॉपी" के रूप में देखा गया था, जिन्हें विभिन्न मशीनों और प्लेटफार्मों पर मूल के समान एक रूप में देखा और मुद्रित किया जा सकता है, लेकिन जिसे संपादित नहीं किया जाना चाहिए। यह परिभाषा पीडीएफ को मानव-पठनीय दस्तावेजों के भंडारण और वितरण के लिए अधिकांश अन्य प्रारूपों से अलग करती है। इन वर्षों में, पीडीएफ बहुत विकसित हुआ है, वर्तमान में कई प्रकार की सामग्री (पाठ, वेक्टर और बिटमैप ग्राफिक्स, इंटरैक्टिव तत्वों, रूपों, ऑडियो, वीडियो, विभिन्न प्रकार के एनोटेशन) के लिए एक कंटेनर है, लेकिन इसका मूल उद्देश्य अभी भी इसकी क्षमताओं का एक स्रोत है , और कई प्रतिबंध।

इसलिए, पाठ दस्तावेज़ों (DOC, RTF, DOCX, आदि) के प्रारूप मुख्य रूप से देखने पर नहीं, बल्कि संपादन दस्तावेज़ों पर केंद्रित होते हैं। एक उचित उपयोगकर्ता द्वारा बनाया गया :) दस्तावेज़ तार्किक रूप से पाठ, चित्र, टेबल को अलग-अलग जगहों पर डालने / हटाने / बदलने, पृष्ठों के आकार और मार्जिन को बदलने, किसी भी आकार के पाठ अंशों के स्वरूप को बदलने और पसंद करने पर प्रतिक्रिया करता है। HTML वेब पेज बहुत संपादन-उन्मुख नहीं हैं (हालांकि वे इसे अनुमति देते हैं), लेकिन लेखक के प्रत्यक्ष हाथों के साथ, वे आम तौर पर न केवल अपने निर्माता की स्क्रीन की स्क्रीन पर प्रदर्शन को सहन करते हैं, बल्कि पूरी तरह से अलग स्क्रीन और उपयोगकर्ता इंटरैक्शन वाले उपकरणों पर भी।

पीडीएफ का एक विशेष तरीका है - यह सबसे व्यापक रूप से एक परजीवी प्रारूप के रूप में उपयोग किया जाता था जिसमें दस्तावेज़ खरोंच से किसी व्यक्ति द्वारा नहीं बनाए जाते हैं, लेकिन सबसे अधिक बार गहरी मशीन प्रसंस्करण द्वारा अन्य प्रारूपों से उत्पन्न होते हैं, जो कई या सभी विवरण खो देता है जो दस्तावेज़ प्रदर्शित करने के लिए अनावश्यक हैं निश्चित दृश्य। पीडीएफ प्राप्त करने का सबसे आम तरीका मेनू में "प्रिंट" कमांड वाले किसी भी एप्लिकेशन से वर्चुअल पीडीएफ प्रिंटर पर प्रिंट करना है।

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

ऐसा परिवर्तन बहुत सटीक रूप से व्यक्त करने में सक्षम है कि छपाई से पहले क्या हुआ (उदाहरण के लिए, लाइनें और प्रतीक किसी भी पैमाने पर अपने तीखेपन को नहीं खोते हैं और काफी कॉम्पैक्ट रूप से संग्रहीत होते हैं), लेकिन दस्तावेज़ के उपकरण को पूरी तरह से अनदेखा कर देता है जिसमें से यह निकला था। उदाहरण के लिए, किसी शब्द या पाठ के अन्य टुकड़े पर जोर देने के लिए, पीडीएफ में वर्णों की एक समर्पित कमांड या विशेषता नहीं होती है - इसके बजाय, वर्णों को अलग-अलग प्रदर्शित किया जाता है (उन समूहों में जो आमतौर पर शब्दों या रेखाओं के साथ मेल नहीं खाते हैं), और आवश्यक मोटाई और रंग की रेखाएं या पतले आयत अलग-अलग खींचे जाते हैं। पृष्ठ पर सही स्थान। टेबल्स, जिसे एक व्यक्ति कोशिकाओं के एक अभिन्न सेट के रूप में मानता है, एक एप्लिकेशन के लिए जो एक पीडीएफ प्रदर्शित करता है, केवल वर्णों और लाइनों का एक अराजक सेट है जो संयोग से, एक ऐसी चीज बनाते हैं जो एक व्यक्ति द्वारा तालिका के रूप में माना जाता है। हाइपरलिंक्स जिनका उपयोग दस्तावेज़ के अंदर नेविगेशन के लिए और वेब पते पर नेविगेट करने के लिए दोनों मूल दस्तावेज़ में किया जा सकता है, छपाई करते समय नेविगेशन टूल के रूप में गायब हो जाते हैं, केवल रंगीन और / या रेखांकित लेबल रहते हैं। सामान्य तौर पर, ठोस नकली और ठग। मैं ऐसे PDF को "वेक्टर" के रूप में नीचे (वेक्टर आदेशों से मिलकर बनाऊंगा, जिसमें ड्राइंग वर्ण शामिल हैं)।

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

कुछ आधुनिक अनुप्रयोग (OpenOffice सुइट के अनुप्रयोग, Microsoft Office के नए संस्करण, ABBYY FineReader और ABBYY PDF ट्रांसफार्मर सहित) पीडीएफ प्रिंटर की तुलना में बहुत बड़े शस्त्रागार का उपयोग करके अपने दम पर पीडीएफ बना सकते हैं, क्योंकि स्रोत दस्तावेज़ के बारे में बहुत अधिक जानते हैं प्रिंटर को पास करने की आवश्यकता है। यह आपको सहेजने की अनुमति देता है, उदाहरण के लिए, हाइपरलिंक जैसे (और न केवल रंगीन और / या रेखांकित पाठ) या कम-रिज़ॉल्यूशन स्क्रीन पर सुधार और प्रदर्शित करने के लिए दस्तावेज़ संरचना के कुछ तत्वों का वर्णन करने के लिए। संरचनात्मक जानकारी वाले ऐसे दस्तावेजों को "टैग किया गया" या "टैग किया हुआ" PDF कहा जाता है। एडोब के अनुसार, एक्रोबैट 5 के बाद से "टैगिंग" को जोड़ा गया है, जिसका उद्देश्य पीडीएफ के पुराने संस्करणों की सबसे चमकदार कमियों को छिपाना है। उदाहरण के लिए, अनटैग किए गए दस्तावेजों के लिए, विंडोज क्लिपबोर्ड (सभी के लिए परिचित कॉपी-पेस्ट) में टेक्स्ट के टुकड़े कॉपी करने के लिए तंत्र के सही संचालन की गारंटी नहीं है। हालाँकि, आज भी, सभी निर्मित PDF को टैग नहीं किया जाता है, जिसमें जनरेटर कार्यक्रमों की सीमित क्षमताओं (या सेटिंग्स में इसके लिए चेकमार्क को सक्षम करने के लिए उपयोगकर्ताओं द्वारा ज्ञान की कमी), या बस ऐसे पीडीएफ के बड़े आकार के कारण, जब यह वास्तव में गर्म है। बड़े संग्रह को संग्रहीत करते समय डिस्क स्थान को बचाने का मुद्दा।

पीडीएफ दस्तावेजों को अन्य प्रारूपों में परिवर्तित करें

एक पीडीएफ दस्तावेज़ की सामग्री को संपादित करने या इसे अन्य, अधिमानतः संपादन योग्य प्रारूपों (तत्काल संपादन के लिए और "किसी दिन" संपादित करने / संपादित करने की क्षमता के साथ भंडारण के लिए) में परिवर्तित करने की इच्छा विभिन्न कारणों से पैदा होती है। पाठ सामग्री को निकालने का सबसे सरल साधन पीडीएफ प्रदर्शित करने वाले किसी भी आवेदन द्वारा प्रदान किया जाता है - मेरे पास सामान्य कॉपी-पेस्ट है, जो काफी आदिम रूप से काम करता है - एक नियम के रूप में, चरित्र और पैराग्राफ स्वरूपण खो जाते हैं, पीडीएफ दस्तावेज़ के तालिकाओं और जटिल लेआउट को अनदेखा किया जाता है। ऐसे अनुप्रयोग हैं जो आपको अन्य प्रारूपों में कनवर्ट किए बिना "पॉइंट-इन" पीडीएफ संपादित करने की अनुमति देते हैं - लेकिन उनके एडिटिंग टूल का शस्त्रागार बहुत सीमित है, ठीक है, सामान्य शब्द प्रोसेसर के साथ कोई तुलना नहीं है :) कई दस्तावेजों के लिए महंगे एडोब एक्रोबैट में, केवल कार्यशील प्रकार का संपादन "एनोटेशन" है - टिप्पणियों को जोड़ने के लिए उपकरण हैं, एक मार्कर, स्ट्राइकथ्रू, आदि के साथ पाठ को उजागर करना। हां, अधिक उन्नत संपादन लगता है, लेकिन आप संयोग से, मजाकिया संदेश नहीं देखा है "चयन के सभी या भाग में कोई सिस्टम फ़ॉन्ट उपलब्ध नहीं है। आप वर्तमान में चयनित फ़ॉन्ट का उपयोग करके पाठ को जोड़ या हटा नहीं सकते हैं। ”जब आप किसी चरित्र या शब्द को एक“ अच्छा ”,“ वेक्टर ”पीडीएफ दस्तावेज़ से एक्रोबेट में हटाने की कोशिश करते हैं? लेकिन क्या आपने एक पंक्ति के टुकड़े को लंबे समय तक रखने की कोशिश नहीं की, दुख की बात है कि पंक्तियों की पूंछ सही पर रेंग रही है? यदि नहीं, तो एडोब उत्पादों का प्यार आना बाकी है! वर्ड प्रोसेसर के लिए सरल और परिचित कार्यों के लिए - उदाहरण के लिए, "कॉलम और पृष्ठों में पाठ के स्थान बदलने के साथ" दस्तावेज़ में कुछ ही सेकंड में "माइक्रोसॉफ्ट" के साथ "एमएस" शब्द की जगह, "- इस तरह के" संपादन "इसके लायक नहीं है।

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

पीडीएफ को अन्य प्रारूपों में परिवर्तित करते समय मुख्य समस्याएं

अक्सर पीडीएफ से संबंधित मुद्दों पर चर्चा करते समय, "पाठ परत" शब्द का उपयोग किया जाता है। सहज रूप से, कई उपयोगकर्ता मानते हैं कि PDF में ऐसे हाइलाइट किए गए भाग हैं जो तार्किक रूप से और स्पष्ट रूप से दिखाई देने वाले पाठ की सभी आवश्यक विशेषताओं का वर्णन करते हैं - या तो अदृश्य, लेकिन खोज द्वारा या माउस द्वारा हाइलाइट किया गया। मैं आपको एक भयानक रहस्य बताना चाहता हूं (शायद निकट भविष्य में एक जोखिम के साथ, एक हत्यारा से एक बुलेट प्राप्त करने के लिए, पीडीएफ प्रारूप और उनके विपणन विभाग के लेखकों द्वारा भेजा गया) - पीडीएफ में इस अर्थ में कोई पाठ परत नहीं है! वास्तव में, प्रत्येक पृष्ठ के लिए इसे आरेखित करने के लिए कमांडों की एक सामान्य धारा होती है, जिसमें विभिन्न प्रकार के कमांड बेतरतीब ढंग से मिश्रित होते हैं - क्लिपिंग क्षेत्रों को सेट करना, बिंदीदार लाइनों की वर्तमान मोटाई, रंग और पैटर्न को बदलना, निर्देशांक प्रणाली को बदलना, फ़ॉन्ट बदलना, सीधी रेखाएँ और घटता (वर्तमान विशेषताओं के साथ) बदलना , वर्तमान विशेषताओं और संकेतित "ग्लिफ़ नंबरों" (ग्लिफ़ - प्रतीक की छवि का विवरण, इसकी अन्य विशेषताओं को ध्यान में रखे बिना), बिटमैप छवियों आदि को प्रदर्शित करते हुए वर्णों के समूह को प्रदर्शित करना। यही है, यहां तक ​​कि विशेष पाठ कमांड केवल कई ड्राइंग टूल में से एक हैं जो अलग-अलग धाराओं को आवंटित नहीं किए जाते हैं।

इससे भी बदतर है - एक पीडीएफ पेज की सीमा के भीतर भी, आप आंख के समान पाठ के छवि साधनों की (बहुत) विस्तृत श्रृंखला का उपयोग कर सकते हैं: अक्षरों को बिटमैप छवि के कुछ हिस्सों के रूप में देखा जा सकता है, उदाहरण के लिए, लोगो में (उन्हें पहचानने का कार्य ओसीआर अनुप्रयोगों का शुद्ध कार्य है, वही ABBYY FineReader), बेज़ियर कर्व्स या विशेष टेक्स्ट कमांड के साथ ड्राइंग के परिणामस्वरूप। यह अंतिम मामला प्रसंस्करण के लिए सबसे अच्छा है, लेकिन यहां तक ​​कि यहां तक ​​कि आमतौर पर यूनिकोड या अन्य एन्कोडिंग से स्वीकृत वर्ण कोड आवश्यक रूप से इंगित नहीं किए जाते हैं - क्योंकि आप केवल पीडीएफ फाइलों में केवल उपयोग किए गए वर्णों के सबसेट से विशेष फोंट लिख सकते हैं और पूरी तरह से "ग्लिफ़ नंबर" का उपयोग करके वर्णों को संदर्भित कर सकते हैं कोडों द्वारा नहीं। यही है, यह हमेशा आसान नहीं होता है कि पात्रों को सही स्थान पर कैसे पहचाना जाए, और उनके कोड निर्धारित किए जाएं! फ़ॉर्मेटिंग के साथ, सटीक एनालॉग की अनुपस्थिति में एक समान फ़ॉन्ट की पसंद सहित, यह अभी भी पेचीदा है।

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

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

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

व्याचेस्लाव सैप्रोनेंको सालासप्रो
पाठ पहचान उत्पाद विभाग

Source: https://habr.com/ru/post/In108459/


All Articles