पीडीएफ फाइलें बनाने पर निबंध. पीडीएफ फाइलें बनाने पर निबंध डेल्फी पीडीएफ पढ़ने के घटक

💖क्या आपको यह पसंद है?लिंक को अपने दोस्तों के साथ साझा करें

डेवलपर्स द्वारा घोषित घटक क्षमताएं:

  • पीडीएफ दस्तावेजों में वेक्टर और रेखापुंज ग्राफिक्स के लिए समर्थन
  • पीडीएफ दस्तावेजों को पासवर्ड से सुरक्षित रखें
  • एक्रोफॉर्म/पीडीएफ फॉर्म समर्थन
  • पानी के निशान
  • आंतरिक और बाहरी लिंक, वेब लिंक और बुकमार्क के साथ पीडीएफ दस्तावेज़ तैयार करें
  • पूर्ण यूनिकोड समर्थन
  • विभिन्न फ़ॉन्ट, टेक्स्ट फ़ॉर्मेटिंग, मल्टी-कॉलम टेक्स्ट लेआउट के लिए समर्थन
  • टीकैनवस समर्थन
  • किसी दस्तावेज़ में पाठ और ग्राफ़िक जानकारी को संपीड़ित करने के लिए अंतर्निहित संग्रहकर्ता
  • TIFF को पीडीएफ में बदलें

उदाहरण के तौर पर, मैंने एक डेमो एप्लिकेशन बनाने का निर्णय लिया जो घटक के साथ बंडल में आता है THotPDF. एप्लिकेशन काफी सरल है - यह दो लिंक और सरल पाठ के साथ एक पीडीएफ उत्पन्न करता है। कोड भी सरल और स्पष्ट है:

प्रक्रिया TForm1. HelloWorldButtonClick (प्रेषक: TObject); आरंभHPDF. बिगिनडॉक; एचपीडीएफ. वर्तमान पृष्ठ। प्रिंटहाइपरलिंक(20, 35, "वेबसाइट: " + मेनएडिट। टेक्स्ट, मेनएडिट। टेक्स्ट); एचपीडीएफ. वर्तमान पृष्ठ। सेटफ़ॉन्ट ("टाइम्स न्यू रोमन", , 16); एचपीडीएफ. वर्तमान पृष्ठ। SetRGBHyperlinkColor(clRed); एचपीडीएफ. वर्तमान पृष्ठ। PrintHyperlink (20, 50, "ऑर्डर पेज:" + BuyEdit. टेक्स्ट, BuyEdit. टेक्स्ट); एचपीडीएफ. वर्तमान पृष्ठ। सेटफ़ॉन्ट ("टाइम्स न्यू रोमन", , 14); एचपीडीएफ. वर्तमान पृष्ठ। टेक्स्टआउट(20, 75, 0, "नेविगेट करने के लिए लिंक पर क्लिक करें"); एचपीडीएफ. एंडडॉक; अंत ;

घटक के संचालन की जटिलताओं में गए बिना भी, आप समझ सकते हैं कि इस डेमो उदाहरण में क्या और कैसे हो रहा है। आइए इसे चलाएं और जेनरेट किए गए दस्तावेज़ की उपस्थिति देखें:

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

4. पीडीएफ क्रिएटर पायलट

कीमत: स्रोत कोड के बिना $450 से लेकर स्रोत कोड के साथ $9950 (!!!) तक
5-XE4
http://www.colorpilot.com/pdflibrary.html#download

लाइब्रेरी की लागत लगभग डेल्फ़ी XE3 प्रोफेशनल जितनी ही है... ठीक है, ठीक है, आइए देखें कि यह लाइब्रेरी क्या है।

डेवलपर्स द्वारा बताई गई विशेषताएं:

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

कुल मिलाकर, सुविधाओं की एक बहुत प्रभावशाली सूची। आइए देखें कि इनमें से कुछ सुविधाएँ व्यवहार में कैसे काम करती हैं। डेमो संस्करण डाउनलोड करें और इसे इंस्टॉल करें।

इंस्टालेशन के बाद, डेल्फ़ी लॉन्च करें (मेरे मामले में यह डेल्फ़ी XE3 है) और मेनू पर जाएँ:

घटक - आयात घटक - आयात प्रकार लाइब्रेरी

हम सूची में एक पुस्तकालय की तलाश करते हैं

हम आयात करते हैं, एक नया प्रोजेक्ट बनाते हैं और मॉड्यूल को उपयोग में शामिल करते हैं PDFCreatorPilotLib_TLB.

अब हम कुछ जीवंत उदाहरणों का उपयोग करके लाइब्रेरी का परीक्षण कर सकते हैं। सबसे पहले, आइए सरल पाठ के साथ एक दस्तावेज़ तैयार करने का प्रयास करें:

प्रक्रिया TForm1. बटन1क्लिक(प्रेषक: टॉब्जेक्ट); var fnt: पूर्णांक; आरंभ (प्रारंभिकरण) पीडीएफ: = टीपीडीएफ दस्तावेज़4। बनाएं(शून्य); पीडीएफ. SetLicenseData ("डेमो", "डेमो"); एफएनटी:=पीडीएफ. AddFont ("वर्दाना" , गलत , गलत , गलत , गलत , fcANSI); पीडीएफ. यूज़फ़ॉन्ट(fnt, 14); पीडीएफ. showTextAt(20, 40, "हैलो, पीडीएफ!"); (सहेजें) पीडीएफ। SaveToFile('HelloPDF.pdf', true); पीडीएफ. नष्ट करना; अंत ;

एप्लिकेशन लॉन्च करें और बनाए गए पीडीएफ दस्तावेज़ को देखें:

आइए अब एक फ़ाइल में रूसी पाठ लिखने का प्रयास करें:

प्रक्रिया TForm1. बटन1क्लिक(प्रेषक: टॉब्जेक्ट); प्रारंभ (आरंभीकरण) (...) पीडीएफ। showTextAt(20, 40, "हैलो, पीडीएफ!"); ( सहेजें ) (...) समाप्त ;


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

5. पीडीएफटूलकिट वीसीएल v4.0.1.293

कीमत: स्रोत के बिना $349 से स्रोत के साथ $499 तक
समर्थित डेल्फ़ी संस्करण: 6-XE4
परीक्षण संस्करण डाउनलोड पृष्ठ: http://www.gnostice.com/PDFtoolkit_VCL.asp?show=downloads

ग्नोस्टिस की इस घटक लाइब्रेरी के बारे में इंटरनेट पर काफी सकारात्मक समीक्षाएँ हैं।

संभावनाओं के अनुसार पीडीएफटूलकिटलगभग 1 से 1 मेल खाता है पीडीएफ क्रिएटर पायलट,वे। पीडीएफ़ को "चिपका" सकते हैं, टेक्स्ट पहचान सकते हैं, लिंक डाल सकते हैं, दस्तावेज़ खोज सकते हैं, आदि। लेकिन, पीडीएफ क्रिएटर पायलट के विपरीत, पीडीएफटूलकिट यदि gtPDFDocument1. IsLoaded फिर gtPDFDocument1 शुरू करें। टेक्स्टआउट( "नमस्ते, दुनिया!" , IntToStr (gtPDFDocument1. PageCount ), //पेजों की श्रेणी जिसमें टेक्स्ट डाला जाएगा gtPDFDocument1. GetPageSize(gtPDFDocument1. PageCount, muPixels) । चौड़ाई/2 // पेज के केंद्र में टेक्स्ट डालें gtPDFDocument1. GetPagesize(gtPDFDocument1. PageCount, muPixels) । ऊँचाई/2); (दस्तावेज़ सहेजें) gtPDFDocument1. SaveToFile('modified_doc.pdf'); अंत ; अंततः gtPDFDocument1. मुक्त अंत ;

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

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


आपसे ऑनलाइन मिलते हैं!


प्रकाशन दिनांक 09/23/2005 07:00 पीडीएफ फाइलें बनाने पर निबंध

हाल ही में, इंटरनेट पर बहुत सारे पीडीएफ कन्वर्टर्स, पाठकों और लेखकों की खोज की गई है और उनमें से अधिकांश को पैसे के लिए पेश किया जाता है और स्रोत कोड की कीमत बहुत अधिक है $200 से और एक स्थान पर (इसमें दिलचस्पी लेने के बाद मैंने इंटरनेट पर सर्फ किया) 900 यूरो तक।

प्रोग्रामिंग के संदर्भ में इस समस्या में मेरी रुचि है और मैं परिणाम आपके ध्यान में ला रहा हूं। (ये परिणाम मुझे एक पीडीएफ फ़ाइल के अंदर का अध्ययन करते समय प्राप्त हुए थे जब आप इसे F3 के माध्यम से कुल कमांडर में खोलते थे)

एक सामान्य पीडीएफ फाइल में चार भाग होते हैं :=

यह क्या है

? यह पीडीएफ विनिर्देशन संस्करण का एक सामान्य संदर्भ है। जो पीडीएफ फाइल की पहली लाइन में मौजूद है. उदाहरण के लिए, "%PDF-1.3" एक्रोबैट के सातवें संस्करण में, जो इस वर्ष की शुरुआत में गर्मियों में कहीं जारी किया गया था, यह संख्या "%PDF-1.7" है, लेकिन यह उत्पाद संस्करण नहीं है, यह एक विनिर्देश है संस्करण। पीडीएफ की दूसरी पंक्ति एक छोटा संक्षिप्त नाम है (स्पष्ट रूप से भविष्य में उपयोग के लिए) "%vgPU"

सभी ने पीडीएफ का पहला भाग समझ लिया है।

दूसरा भाग क्या कहलाता है? ?

उत्तर बहुत सरल है: यह वस्तुओं का एक क्रम है, जिसका विवरण, साथ ही शीर्षलेख, पाठ रूप में प्रस्तुत किया जाता है।

उदाहरण के लिए, प्रत्येक ऑब्जेक्ट नाम में एक सीरियल नंबर के साथ एक टेक्स्ट टुकड़ा है "4 0 ओबीजे"

  • 4 यह वस्तु का क्रमांक है
  • 0 यह फ़ाइल की (पुनः) पीढ़ी की संख्या है, अर्थात जब फ़ाइल को अद्यतन (संपादित) किया जाता है, तो यह संख्या बढ़ जाती है
  • ओबीजेयह एक कोड शब्द है जिसका अर्थ है कि हमने दस्तावेज़ के मुख्य भाग में एक वस्तु का सामना किया है

सभी वस्तुओं को अप्रत्यक्ष और प्रत्यक्ष में विभाजित किया गया है। सभी अप्रत्यक्ष हैं, और उनमें से अधिकांश शब्द के पीछे हैं ओबीजेउनके शरीर में एक डिलीमीटर है"<<", означающее начало данных объекта. И в конце данных закрывающий делиметер ">>" और कोड वर्ड एंडोबज

प्रत्यक्ष वस्तुओं के शरीर में खुलने और बंद होने वाले सीमांकक नहीं होने चाहिए"<<", ">>>"सभी अप्रत्यक्ष वस्तुओं तक पहुंच संभव है क्रॉस-रेफरेंस टेबल. यह फ़ाइल की शुरुआत से ऑब्जेक्ट की शुरुआत तक ऑफसेट के रूप में संदर्भों का प्रतिनिधित्व करता है (ऑब्जेक्ट में डेटा (लाइनें) अलग हो जाते हैं) #13#10 या #13 )

पीडीएफ फ़ाइल के मुख्य भाग में "सबसे महत्वपूर्ण" ऑब्जेक्ट के प्रकार का एक गौरवपूर्ण नाम होता है "/कैटलॉग"

4 0 ओब्जेक्ट<< /Type /Catalog /Pages 2 0 R /OpenAction [ 5 0 R /XYZ null 364 1 ] /PageMode /UseNone >>endobj

वास्तव में, न्यूनतम "हैलो वर्ल्ड" पीडीएफ फ़ाइल के मुख्य भाग में 3 "मुख्य" ऑब्जेक्ट होने चाहिए। मैं उन्हें प्रकार के आधार पर सूचीबद्ध करता हूँ:

  • "/कैटलॉग"इसमें एक लिंक है: पेज ट्री के लिए ( /पेज)
  • "/पेज"इसमें दस्तावेज़ पृष्ठों के समूह का लिंक शामिल है (उदाहरण के लिए 2 0 ओबीजे > एंडोबज)
  • "/पृष्ठ"इसमें किसी विशिष्ट पृष्ठ से संबंधित वस्तुओं का लिंक होता है। (उदाहरण के लिए 3 0 ओबीजे > /रोटेट 0 >>)
और कुछ छोटे

आइए पेज ऑब्जेक्ट का विश्लेषण करें:

  • /घुमाएँएक फ़ील्ड जो यह दर्शाती है कि प्रोग्राम में प्रदर्शित होने पर पृष्ठ छवि को कितने डिग्री तक घुमाया जाना चाहिए
  • /मीडियाबॉक्सऔर /क्रॉपबॉक्सपृष्ठ आकार का वर्णन करने वाले फ़ील्ड
  • /अभिभावकमूल वस्तु का संदर्भ "/पेज"
  • /संसाधनयह फ़ील्ड बताती है कि पृष्ठ प्रदर्शित करते समय किस फ़ॉन्ट का उपयोग किया जाना चाहिए (फ़ॉन्ट एक अलग ऑब्जेक्ट है) और प्रोकसेट सेटिंग यह सेटिंग इंगित करती है कि इस पृष्ठ के डेटा स्ट्रीम में कौन सी सामग्री है (इसे ऑब्जेक्ट के रूप में भी परिभाषित किया जा सकता है, फ़ील्ड के रूप में नहीं) )
  • /सामग्री"पेज" ऑब्जेक्ट में सबसे दिलचस्प फ़ील्ड इस पेज की सामग्री ऑब्जेक्ट का लिंक देता है, और: यदि यह फ़ील्ड "पेज" ऑब्जेक्ट में अनुपस्थित है, तो पेज खाली है
पृष्ठ सामग्री:
एक वस्तु "धारा" 4 0 ओबीजे > स्ट्रीम बीटी /एफ12 9 टीएफ 10 782 टीडी 0 -12.5 टीडी (मैक्स फॉकिन) टीजे 0 -12.5 टीडी (एमएनबी) टीजे 0 -12.5 टीडी () टीजे 0 -12.5 टीडी (मैक्स प्रिवेट) टीजे 0 -12.5 टीडी (1) टीजे 0 -12.5 टीडी (1) टीजे 0 -12.5 टीडी (2) टीजे 0 -12.5 टीडी (3) टीजे 0 -12.5 टीडी (45) टीजे ईटी एंडस्ट्रीम एंडोबज / लंबाई 305 यह फ़ील्ड दिखाता है कि कितने बाइट्स हैं शब्द धाराशब्द को एंडस्ट्रीम

सबसे सरल विकल्प ऑब्जेक्ट में एक अनएन्कोडेड और अनकंप्रेस्ड डेटा स्ट्रीम है धारा. यह ऑपरेटरों तक ही सीमित है बीटीऔर एट

बीटी एक टेक्स्ट ऑब्जेक्ट शुरू करता है - टेक्स्ट की शुरुआत को दर्शाता है ईटी एक टेक्स्ट ऑब्जेक्ट को समाप्त करता है। - पाठ /F12 9 Tf के अंत की विशेषता बताता है

  • /F12यह उस ऑब्जेक्ट का कोड नाम है जो इस पृष्ठ पर प्रयुक्त फ़ॉन्ट की विशेषता बताता है
  • 9 यह फ़ॉन्ट आकार है
  • टी.एफयह एक ऑपरेटर है जो बताता है कि स्टीम ऑब्जेक्ट में यह लाइन फ़ॉन्ट और आकार की सेटिंग है
10,782 टीडी वे संख्याएं हैं जहां यह रेखा शुरू होती है (ऊपरी बाएं कोने से गिनती) टीजे नई लाइन ऑपरेटर है, खैर, कोष्ठक में हमारा पाठ है

मैं यहां कोडित स्ट्रीम की व्याख्या नहीं कर रहा हूं। यह RC4, RC5, MD5 एल्गोरिदम पर आधारित है।

वस्तु क्या है फ़ॉन्ट 12 0 ओबीजे >

  • /प्रकार/फ़ॉन्टस्वाभाविक रूप से प्रकार का नाम
  • /उपप्रकार /प्रकार1उपप्रकार का नाम
  • /नाम /F7 F7यह कोड नाम है

पीडीएफ कई प्रकार के फ़ॉन्ट का समर्थन करता है। वे नीचे सूचीबद्ध हैं

  • प्रकार 1, उपसमुच्चय और एकाधिक मास्टर "स्नैपशॉट" सहित
  • प्रकार 3
  • ट्रू टाइप, उपसमुच्चय सहित
  • टाइप 0
सच कहूँ तो, मुझे टाइप 3, ट्रू टाइप, उपसमुच्चय सहित, टाइप 0 समझ नहीं आया, मैं उनके बारे में कुछ नहीं कह सकता
और टाइप 1 निम्नलिखित फ़ॉन्ट्स हैं कूरियर कूरियर-बोल्ड कूरियर-बोल्डओब्लिक कूरियर-ओब्लिक हेल्वेटिका हेल्वेटिका-बोल्ड हेल्वेटिका-बोल्डऑब्लिक हेल्वेटिका-ओब्लिक टाइम्स-रोमन टाइम्स-बोल्ड टाइम्स-इटैलिक टाइम्स-बोल्डइटैलिक सिंबल जैपफडिंगबैट्स

20 0 ओबीजे > एंडोबज यह पहले प्रकार के फ़ॉन्ट के लिए कोड नाम वाला एक ऑब्जेक्ट है। इस कोड नाम का उपयोग करके आप ऑब्जेक्ट को आसानी से प्राप्त कर सकते हैं फ़ॉन्ट. 6 0 ओब्जेक्ट >

सभी: यानी न्यूनतम निम्नलिखित वस्तुओं से मिलकर बनता है: "कैटलॉग", "पेज", "पेज", "संसाधन"(वैकल्पिक रूप से पेज ऑब्जेक्ट में फ़ील्ड के रूप में मौजूद हो सकता है), अनटाइप्ड ऑब्जेक्ट "धारा", वस्तुओं का समूह "फ़ॉन्ट"

क्या हुआ है ? वास्तव में, यह एक नियमित पाठ तालिका है, यह शब्द से शुरू होती है xrefऔर इसके मुख्य भाग में दस्तावेज़ की सभी अप्रत्यक्ष वस्तुओं के लिंक हैं। यहां एक उदाहरण है 000 0892 00000 एन 0000001006 00000 एन 0000001125 00000 एन 0000001247 00000 एन 0000001373 00000 एन 0000001486 00000 एन 0000001604 00000 एन 00000 01725 00000 एन 0000001850 00000 एन 0000001967 00000 एन 0000002084 00000 एन 0000002203 00000 एन 0000002326 00000 एन 0000002439 00000 एन 0000002558 00 000 एन 0000000024 0000 1 एफ 0000002751 00000 एन 0000002831 00000 एन 0000000000 00001 एफ 0000002915 00000 एन 0000002955 00000 एन 0 27 इन संख्याओं का अर्थ निम्नलिखित है:

  • 0 - तालिका में पहला ऑब्जेक्ट नंबर
  • 27 - तालिका तत्वों की संख्या

तालिका के पहले तत्व का हमेशा रूप होता है " XXXXXXXXXX 65535 एफ"जहां X एक अंक है और 65535 तालिका में पहले तत्व के लिए डिफ़ॉल्ट मान है। प्रतीक "f" का अर्थ है " मुक्त"अर्थात, वस्तु का उपयोग नहीं किया जाता है

आइए इस तालिका के तत्व का विश्लेषण करें।

  • पहले 10 अंक फ़ाइल की शुरुआत से ऑब्जेक्ट की शुरुआत तक ऑफसेट हैं।
  • 00000000016 का अर्थ है कि फ़ाइल की शुरुआत से 16 बाइट्स आपको ऑब्जेक्ट का पहला उल्लेख मिलेगा, उदाहरण के लिए, 4 0 ओब्जेक्ट

दूसरे पांच अंक फ़ाइल जनरेशन नंबर हैं। यदि फ़ाइल अभी बनाई गई है, तो वे हमेशा शून्य होती हैं। यदि फ़ाइल को संशोधित किया जाता है, तो यह संख्या एक बढ़ जाती है। वह है, 0000000024 00001 एफ

हमारे द्वारा अभी बनाई गई विहित पीडीएफ फ़ाइल में केवल एक तालिका है। लेकिन, यदि फ़ाइल संपादित की गई है, तो ऐसी बहुत सी तालिकाएँ हो सकती हैं।

तालिकाओं का संबंध अंतिम तत्व का उपयोग करके किया जाता है और कोड वर्ड प्रारंभxref

विहित, नव निर्मित पीडीएफ फ़ाइल में केवल एक तालिका है, तालिका के बाद एक तत्व है ट्रेलरऔर ट्रेलर के बाद आता है कोड वर्ड प्रारंभxref, फ़ाइल की शुरुआत से तालिका की शुरुआत तक ऑफसेट को दर्शाता है, यहां एक उदाहरण दिया गया है। ट्रेलर> स्टार्टएक्सरेफ 173 %%ईओएफ इसका मतलब है कि दस्तावेज़ की शुरुआत से 173 बाइट्स के बाद, कोड शब्द मौजूद होगा xref. लेकिन, यदि फ़ाइल संपादित की गई है, तो फ़ाइल में अंतिम ट्रेलर इस तरह दिखेगा:<7a15ab3ed3999575ff2f3034104a82c1>] >> स्टार्टएक्सरेफ 173 %%ईओएफ लेकिन, अगर हम उस तालिका का संदर्भ लेते हैं जहां लिंक इंगित करता है स्टार्टएक्सरेफ 173, तो हमें निम्नलिखित तालिका मिलेगी, और उसके पीछे एक ट्रेलर होगा जिसमें एक फ़ील्ड होगी /पिछला 3896 3 16 0000000016 00000 N 00000006664 00000 N 0000000936 00000 N 0000001106 00000 N 0000001133 00000 N 0000001250 00000 N 0000001395 0000001811 0000001811111111111111111111111111000 N 0000002760 00000 N 0000003438 00000 N 000000351 6 00000 N 00000007776 00000 N 0000000916 00000 एन ट्रेलर<7a15ab3ed3999575ff2f3034104a82c1>] >> स्टार्टएक्सरेफ 567 %%ईओएफ

यह क्षेत्र /पिछला 3896हमें पिछली तालिका और लिंक की ओर इशारा करता है स्टार्टएक्सरेफ 567अगली तालिका की ओर इंगित करता है और इसी तरह लगभग अनंत काल तक, अगले फ़ील्ड तक प्रारंभxrefहम नहीं देखेंगे 0 . इसका मतलब है कि हमने सभी तालिकाएँ पढ़ ली हैं।

निस्संदेह, इस निबंध में स्रोत कोड का अभाव है। यहाँ यह है: दो मुख्य मॉड्यूल प्रस्तुत किए गए हैं" पीडीएफ दस्तावेज़"और सहायक" पीडीएफबेसफॉन्ट्स"

निम्नलिखित फ़ाइलें सामग्री से जुड़ी हुई हैं:

  • मॉड्यूल PDFDocument.pas और PDFBaseFonts.pas का स्रोत कोड (16 K) 9/23/2005 प्रातः 7:02:00 बजे से अद्यतन

सामग्री की चर्चा [07/31/2006 06:33 ] 7 संदेश

इस लेख में, हम देखेंगे कि अपना स्वयं का निर्माण कैसे करें पीडीएफ-दस्तावेज़, और अगले लेख में हम देखेंगे कि आप कैसे देख सकते हैं पीडीएफ-आपके प्रोजेक्ट में दस्तावेज़, साथ ही प्रिंट सामग्री, दस्तावेज़ के माध्यम से नेविगेट करना, इत्यादि।

इसके लिए हमें टैब से घटकों की आवश्यकता है पागल होना. आइए उन घटकों को स्थापित करें जिनकी हमें काम करने के लिए आवश्यकता है, और ये हैं:

  • TRvNDRलेखक
  • TRvRenderPdf
  • टीबटन

अवयव TRvNDRलेखकमें रिकॉर्डिंग के लिए अभिप्रेत है पीडीएफ-फ़ाइल जानकारी (पाठ, ग्राफ़िक) स्ट्रीम के माध्यम से।

अवयव TRvRenderPdfजानकारी (पाठ, ग्राफिक, आदि) बनाने और चित्रित करने के लिए डिज़ाइन किया गया। ठीक है, जब आप एक बटन दबाएंगे, तो हम अपने में कुछ दर्ज करेंगे पीडीएफ-फ़ाइल।

हम सिद्धांत के बारे में ज्यादा नहीं लिखेंगे, लेकिन सीधे प्रोग्रामिंग की ओर बढ़ेंगे, लेकिन हमें पहले एक नियमित खाली बनाना होगा पीडीएफ-फाइल करें और इसे प्रोग्राम के रूट में डालें। घटना के बगल में क्लिक परहमारे बटन के लिए हम निम्नलिखित कोड लिखेंगे:

प्रक्रिया TForm1. बटन1क्लिक(प्रेषक: टॉब्जेक्ट); var स्ट्रीम: TMemoryStream; स्ट्रीम शुरू करें: = TMemoryStream. बनाएं ; RvNDrWriter1. धारा :=धाराएँ; RvNDRWriter1. निष्पादित करना ; RvRenderPdf1. PrintRender(स्ट्रीम, "test.pdf"); ShellExecute(हैंडल, शून्य, "test.pdf", "" , "" , SW_SHOW); फ्रीएंडनिल(स्ट्रीम); अंत ;

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

अब बस इतना ही, हमें डेटा बनाते समय होने वाली एक घटना की आवश्यकता है, जिसमें हम अपनी सारी जानकारी प्रदर्शित करेंगे। घटक का चयन करना TRvNDRलेखकऔर इस घटक की घटनाओं की सूची देखें, जिसके बाद हम घटना ढूंढते हैं ऑनप्रिंटऔर इस घटना में हम निम्नलिखित कोड लिखते हैं:

प्रक्रिया TForm1. प्रिंट (प्रेषक: TObject); प्रारंभ bmp: = TBitmap. बनाएं ; बीएमपी. LoadFromFile('test.bmp'); RvNDRWriter1 के साथ SetFont('Arial' , 16) शुरू करें; फ़ॉन्ट रंग: = सीएलग्रीन; प्रिंट करें ("टेस्ट टेक्स्ट"); PrintHeader('पीडीएफ फाइल शुरू करें', pjCenter); PrintFooter('पीडीएफ फाइल समाप्त करें', pjCenter); लाइनटू(10,10) ; प्रिंटबिटमैप(1, 1, 1, 1, बीएमपी); अंत ; फ्रीएंडनिल(बीएमपी); अंत ;

खैर, सबसे पहले, हम छवि अपलोड करते हैं। *.बीएमपी, स्वाभाविक रूप से परिवर्तनशील बीएमपी, हमारे पास एक क्लास ऑब्जेक्ट है टीबीटमैप. हम इसे अपने में खींचने के लिए इसे डाउनलोड करते हैं पीडीएफ-दस्तावेज़।

और फिर, मुझे लगता है कि सब कुछ स्पष्ट है, प्रक्रिया प्रिंटहैडर- दस्तावेज़ (पृष्ठ), प्रक्रिया के शीर्षक में शिलालेख प्रदर्शित करता है प्रिंटफुटर- दस्तावेज़ (पृष्ठ) के अंत में शिलालेख प्रदर्शित करता है। प्रक्रिया प्रिंटबिटमैप- किसी दस्तावेज़, प्रक्रिया में एक छवि आउटपुट करता है सेटफ़ॉन्ट- दस्तावेज़ फ़ॉन्ट, प्रक्रिया सेट करता है लिपि का रंग- दस्तावेज़ फ़ॉन्ट रंग सेट करता है।

इस उदाहरण के लिए, हमें निम्नलिखित घटकों की आवश्यकता होगी, जो रेव टैब में स्थित हैं। और इसलिए, आइए उन घटकों को स्थापित करना शुरू करें जिनकी हमें आवश्यकता है, अर्थात्:

  • TRvNDRलेखक
  • TRvRenderPdf
  • टीबटन

मैं इन घटकों पर थोड़ा ध्यान देने और समझने का प्रस्ताव करता हूं कि वे क्या सेवा प्रदान करते हैं। वैसे, मुझे उनके बारे में जानकारी मेरे द्वारा खरीदी गई कुछ पुस्तकों से मिली progbook.ru. इसलिए, यदि आप डेल्फ़ी पर अच्छी किताबें खरीदना चाहते हैं, तो इस स्टोर पर आने के लिए आपका स्वागत है।

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

प्रक्रिया TForm1.Button1Click (प्रेषक: TObject); var स्ट्रीम:TMemoryStream; स्ट्रीम प्रारंभ करें:=TMemoryStream.create; RvNDrWriter1.स्ट्रीम:=स्ट्रीम; RvNDRWriter1.निष्पादित करें; RvRenderPdf1.PrintRender(स्ट्रीम, "test.pdf"); ShellExecute(हैंडल, शून्य, "test.pdf", "", "", SW_SHOW); फ्रीएंडनिल(स्ट्रीम); अंत;

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

लेकिन चलिए ज्यादा बकवास नहीं करते हैं, बल्कि सीधे उस विषय पर आते हैं जिसमें हमारी रुचि है, अर्थात् प्रोग्रामिंग :)

सबसे पहले, हमें एक नियमित खाली पीडीएफ फाइल बनानी होगी और इसे अपने प्रोग्राम के रूट फ़ोल्डर में रखना होगा।

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

इसे निष्पादित करने के बाद, हमें एक घटना की आवश्यकता होती है जो डेटा खींचते समय घटित होती है, इस घटना में हम वह जानकारी प्रदर्शित करेंगे जिसकी हमें आवश्यकता है;

आइए कोड देखें. आरंभ करने के लिए, मैं एक *.bmp छवि लोड करता हूं, एक bmp वैरिएबल बनाता हूं, और TBitmap वर्ग का एक ऑब्जेक्ट बनाता हूं। मैं इसे डाउनलोड करता हूं ताकि मैं फिर हमारी पीडीएफ फाइल बना सकूं।

मुझे लगता है कि हर चीज़ को और अधिक स्पष्ट रूप से वर्णित करना उचित नहीं है, और इसलिए, PrintHeader प्रक्रिया दस्तावेज़ हेडर में एक शिलालेख जोड़ती है, PrintFooter प्रक्रिया दस्तावेज़ के अंत में एक शिलालेख जोड़ती है। PrintBitmap प्रक्रिया दस्तावेज़ में एक छवि जोड़ती है, SetFont प्रक्रिया आवश्यक दस्तावेज़ फ़ॉन्ट सेट करती है, फ़ॉन्ट रंग प्रक्रिया वांछित दस्तावेज़ फ़ॉन्ट रंग सेट करती है।

बाद के सभी ग्राफ़िक फ़ंक्शंस और प्रक्रियाएँ बिल्कुल वैसी ही हैं जैसे अन्य घटकों के कैनवास पर ग्राफ़िक जानकारी प्रदर्शित करते समय।

मैं दस्तावेज़ में एक नई शीट बनाने के लिए न्यूपेज फ़ंक्शन का उपयोग करता हूं। जानकारी प्रदर्शित करने के लिए इसके बाद जो कुछ भी जोड़ा जाएगा वह दस्तावेज़ की एक नई शीट पर प्रदर्शित किया जाएगा।

महत्वपूर्णताकि सभी मॉड्यूल: RpRender, RpRenderPDF, RpDefine, RpBase, RpFiler, RpRave, RpCon प्रोजेक्ट से जुड़े हों!



मित्रों को बताओ