مكونات قراءة دلفي pdf. إضافة عارض PDF إلى البرنامج باستخدام ActiveX

قدرات المكونات المعلنة من قبل المطورين:

  • دعم الرسومات المتجهة والنقطية في مستندات PDF
  • حماية مستندات PDF بكلمة مرور
  • دعم نماذج AcroForms/PDF
  • علامات مائية
  • قم بإنشاء مستندات PDF بروابط داخلية وخارجية وروابط ويب وإشارات مرجعية
  • دعم يونيكود الكامل
  • دعم الخطوط المختلفة وتنسيق النص وتخطيط النص متعدد الأعمدة
  • دعم تي كانفاس
  • أرشيفي مدمج لضغط المعلومات النصية والرسومية في المستند
  • تحويل TIFF إلى PDF

على سبيل المثال، قررت إنشاء تطبيق تجريبي يأتي مرفقًا مع المكون THotPDF. التطبيق بسيط للغاية - فهو يقوم بإنشاء ملف PDF يحتوي على رابطين ونص بسيط. الكود أيضًا بسيط وواضح:

الإجراء TForm1 HelloWorldButtonClick(Sender: TObject); startHPDF. بيغندوك؛ HPDF. الصفحه الحاليه. PrintHyperlink(20, 35, "Website: " + MainEdit.Text, MainEdit.Text); HPDF. الصفحه الحاليه. SetFont("تايمز نيو رومان"، , 16); HPDF. الصفحه الحاليه. SetRGBHyperlinkColor(clRed); HPDF. الصفحه الحاليه. PrintHyperlink (20، 50، "صفحة الطلب:" + BuyEdit.Text, BuyEdit.Text); HPDF. الصفحه الحاليه. SetFont("تايمز نيو رومان"، , 14); HPDF. الصفحه الحاليه. TextOut(20, 75, 0, "انقر فوق الرابط للتنقل"); HPDF. إنددوك؛ نهاية ؛

حتى بدون الخوض في تعقيدات تشغيل المكون، يمكنك فهم ماذا وكيف يحدث في هذا المثال التجريبي. لنقم بتشغيله وإلقاء نظرة على مظهر المستند الذي تم إنشاؤه:

هذان المستطيلان الأزرقان الموجودان في المستند عبارة عن روابط لصفحتين... والنص البسيط "انقر فوق الرابط للتنقل" غير مرئي في أي مكان على الإطلاق. على الرغم من أننا يجب أن نشيد، عندما تنقر على المستطيل، يتم فتح الرابط بالفعل. بشكل عام، إما أن المطورين كانوا في عجلة من أمرهم للإعلان عن دعم دلفي حتى XE3، أو أن النسخة التجريبية تعمل بشكل مثير للاهتمام، ولكن بعد تشغيل هذا العرض التوضيحي، فقدت بطريقة ما الرغبة في استخدام THotPDF حتى مجانًا. هيا لنذهب.

4. برنامج PDF Creator التجريبي

سعر: من 450 دولارًا بدون أكواد المصدر إلى 9950 دولارًا (!!!) مع أكواد المصدر
5-XE4
http://www.colorpilot.com/pdflibrary.html#download

تكلف المكتبة تقريبًا نفس تكلفة تكلفة دلفي XE3 Professional... حسنًا، حسنًا، دعونا نرى ما هي هذه المكتبة.

الميزات التي ذكرها المطورون:

  • مجموعة موسعة من الأساليب والخصائص لإنشاء ملفات PDF بسهولة؛
  • قراءة ودمج مستندات PDF الموجودة؛
  • إضافة وإزالة صفحات مستند PDF؛
  • دعم يونيكود.
  • إنشاء علامات مائية لكل صفحة؛
  • إضافة صور مصغرة إلى مستند PDF؛
  • استخدام الخطوط وتضمينها (TrueType، وOpenType، وType1، وما إلى ذلك)؛
  • إنشاء مستندات PDF تفاعلية باستخدام JavaScript والارتباطات التشعبية؛
  • دعم عناصر AcroForm التفاعلية: حقول إدخال النص، والأزرار، وأزرار الاختيار، والقوائم المنسدلة، ومربعات الاختيار؛
  • التشفير وحماية كلمة المرور لمستندات PDF التي تم إنشاؤها؛
  • إنشاء وإدارة محتوى الوثيقة؛
  • قم بالوصول إلى HDC للرسم على صفحات PDF باستخدام وظائف WinAPI.
  • استخدام الصور بتنسيقات مختلفة (JPEG، TIFF، PNG، BMP، GIF)؛
  • إنشاء واستخدام التعليقات التوضيحية؛
  • إنشاء مستندات PDF على القرص أو في الذاكرة؛
  • استخراج النص من وثائق PDF؛

وبشكل عام، هناك قائمة رائعة من الميزات. دعونا نرى كيف تعمل بعض هذه الميزات في الممارسة العملية. قم بتنزيل الإصدار التجريبي وتثبيته.

بعد التثبيت، قم بتشغيل Delphi (في حالتي، Delphi XE3) وانتقل إلى القائمة:

المكون - مكون الاستيراد - مكتبة نوع الاستيراد

نحن نبحث عن مكتبة في القائمة

نقوم باستيراد وإنشاء مشروع جديد وإدراج الوحدة في الاستخدامات PDFCreatorPilotLib_TLB.

يمكننا الآن اختبار تشغيل المكتبة باستخدام بعض الأمثلة الحية. أولاً، دعونا نحاول إنشاء مستند بنص بسيط:

الإجراء TForm1 Button1Click(Sender: TObject); فار فنت: عدد صحيح؛ البدء (التهيئة) PDF := TPDFDocument4. إنشاء (لا شيء)؛ بي دي إف. SetLicenseData ("demo" , "demo" ) ; فنت:=pdf. AddFont ("Verdana" , false , false , false , false , fcANSI) ؛ بي دي إف. UseFont(fnt, 14); بي دي إف. ShowTextAt (20، 40، "HELLO، PDF!")؛ (حفظ) قوات الدفاع الشعبي. SaveToFile("HelloPDF.pdf", true); بي دي إف. هدم؛

نهاية ؛

قم بتشغيل التطبيق وإلقاء نظرة على مستند PDF الذي تم إنشاؤه:

الآن دعونا نحاول كتابة نص روسي إلى ملف:


ربما تحتاج في مكان ما في خصائص الفصل إلى تكوين شيء ما، أو استدعاء طريقة ما من شأنها تمكين دعم Unicode، ولكن مقابل هذا النوع من المال، أود الحصول على مكتبة ستعمل فور إخراجها من الصندوق دون أي متاعب مع الإعدادات والتعديلات. .. بالمناسبة، لم تنجح طريقة إدراج الرابط (AddHyperLink) أيضًا - فقد ظل المستند أصليًا على الرغم من حقيقة إدراج الرابط المفترض. ولكن، يجب أن نشيد، أن محاولة إدراج ملف PDF تم إنشاؤه مسبقًا في مستند جديد قد نجحت بضجة كبيرة - فقد تم إدراج المستند في الصفحة الجديدة كما ينبغي، دون أخطاء.

5. مجموعة أدوات PDF VCL v4.0.1.293

سعر: من 349 دولارًا بدون مصادر إلى 499 دولارًا مع المصادر
إصدارات دلفي المدعومة: 6-XE4
صفحة تنزيل الإصدار التجريبي: http://www.gnostice.com/PDFtoolkit_VCL.asp?show=downloads

هناك الكثير من المراجعات الإيجابية على الإنترنت حول مكتبة المكونات هذه من Gnostice.

حسب الإمكانيات مجموعة أدوات PDFما يقرب من 1 إلى 1 يتوافق برنامج PDF Creator التجريبي،أولئك. يمكنه "لصق" ملفات PDF والتعرف على النص وإدراج الروابط والبحث في المستندات وما إلى ذلك. ولكن، على عكس PDF Creator Pilot، مجموعة أدوات PDF إذا كان 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 حلول مختلفة لإنشاء مستندات PDF والعمل معها في دلفي. يتمتع كل حل بمزاياه (مجاني ومتطور) وعيوبه (التكلفة الباهظة، ومشاكل Unicode، وما إلى ذلك). فيما يتعلق بمشكلتي، يجب أن يتم "التعامل مع كل الحلول باستخدام ملف". من ناحية أخرى، هناك مجموعة من الخدمات المدفوعة والمجانية على الإنترنت لإنشاء ملفات PDF، ولكن، تذكر أن مثل هذه الخدمات تميل إلى الظهور فجأة والموت، بطريقة ما لا أشعر بالميل إلى المشاركة فيها. هناك، بالطبع، حل آخر - حل محلي الصنع وليس بالكامل في موضوع دلفي، ولكن المزيد عن ذلك في وقت آخر، ولكن الآن سأفكر فيما يجب فعله مع عميل DelphiFeeds


نراكم على الانترنت!


تاريخ النشر 23/09/2005 07:00 مقال عن إنشاء ملفات PDF

في الآونة الأخيرة، تم اكتشاف الكثير من محولات PDF والقراء والكتاب على الإنترنت، ويتم عرض الغالبية العظمى منهم مقابل المال، ويتراوح سعر البرنامج نفسه من 10 دولارات إلى 300 دولار من 200 دولار وفي مكان واحد (بعد أن اهتممت بهذا، قمت بتصفح الإنترنت) بمبلغ يصل إلى 900 يورو.

لقد أثارت هذه المشكلة اهتمامي من حيث البرمجة وسألفت انتباهكم إلى النتائج. (لقد حصلت على هذه النتائج أثناء دراسة الدواخل لملف PDF عند فتحه في إجمالي القائد عبر F3)

يتكون ملف PDF النموذجي من أربعة أجزاء :=

ما هذا

؟ يعد هذا مرجعًا شائعًا لإصدار مواصفات PDF. وهو موجود في السطر الأول من ملف PDF. على سبيل المثال، "%PDF-1.3" في الإصدار السابع من Acrobat، الذي تم إصداره في مكان ما في أوائل الصيف من هذا العام، هذا الرقم هو "%PDF-1.7"، ولكن هذا ليس إصدار منتج، هذه مواصفات إصدار. السطر الثاني من ملف PDF عبارة عن اختصار صغير (يبدو أنه مخصص للاستخدام المستقبلي) "%vgPU"

لقد اكتشف الجميع الجزء الأول من ملف PDF.

ماذا يسمى الجزء الثاني ?

الجواب بسيط للغاية: هذه سلسلة من الكائنات، يتم تقديم وصفها وكذلك الرأس في شكل نص.

كل كائن عبارة عن جزء نصي يحتوي على رقم تسلسلي في الاسم، على سبيل المثال "4 0 كائن"

  • 4 هذا هو الرقم التسلسلي للكائن
  • 0 هذا هو عدد (إعادة) إنشاء الملف، أي أنه عندما يتم تحديث (تحرير) الملف، يزداد هذا العدد
  • objهذه كلمة رمزية تعني أننا واجهنا كائنًا في نص المستند

وتنقسم جميع الكائنات إلى غير مباشرة ومباشرة. كلها غير مباشرة، وأغلبها بعد الكلمة objلديهم محدد في أجسادهم"<<", означающее начало данных объекта. И в конце данных закрывающий делиметер ">>" وكلمة السر endobj

يجب ألا تحتوي الكائنات المباشرة على محددات فتح وإغلاق في أجسامها"<<", ">>>"جميع الكائنات غير المباشرة يمكن الوصول إليها من خلال جدول الإسناد الترافقي. تمثل المراجع على شكل إزاحة من بداية الملف إلى بداية الكائن (يتم فصل البيانات (السطور) في الكائن #13#10 أو #13 )

إن نوع الكائن "الأهم" في نص ملف PDF له اسم فخور "/فهرس"

4 0 الهدف<< /Type /Catalog /Pages 2 0 R /OpenAction [ 5 0 R /XYZ null 364 1 ] /PageMode /UseNone >>endobj

في الواقع، يجب أن يكون هناك 3 كائنات "رئيسية" في نص ملف PDF المصغر "Hello World". اسمحوا لي أن أدرجها حسب النوع:

  • "/فهرس"يحتوي على رابط: إلى شجرة الصفحة ( /الصفحات)
  • "/الصفحات"يحتوي على رابط لمجموعة صفحات المستند (على سبيل المثال 2 0 obj > endobj)
  • "/صفحة"يحتوي على رابط للكائنات المتعلقة بصفحة معينة. (على سبيل المثال 3 0 obj > /Rotate 0 >>)
وعدد قليل منها طفيفة

دعنا نحلل كائن الصفحة:

  • /استدارةحقل يشير إلى عدد الدرجات التي يجب تدوير صورة الصفحة عند عرضها في البرنامج
  • /MediaBoxو /CropBoxالحقول التي تصف حجم الصفحة
  • /الأبوينإشارة إلى الكائن الأصل "/الصفحات"
  • /موارديصف هذا الحقل الخط الذي يجب استخدامه عند عرض الصفحة (الخط هو كائن منفصل) ويشير إعداد ProcSet إلى المحتوى الموجود في دفق البيانات لهذه الصفحة (يمكن أيضًا تعريفه ككائن، وليس كحقل )
  • /محتوياتالحقل الأكثر إثارة للاهتمام في كائن "الصفحة" يعطي رابطًا لكائن محتوى هذه الصفحة، و: إذا كان هذا الحقل غائبًا في كائن "الصفحة"، فإن الصفحة فارغة
محتوى الصفحة:
شيء "تدفق" 4 0 obj > تيار BT /F12 9 Tf 10 782 TD 0 -12.5 TD (Max Fokin) Tj 0 -12.5 TD (mnb) Tj 0 -12.5 TD () Tj 0 -12.5 TD (Max Privet) Tj 0 -12.5 TD (1) Tj 0 -12.5 TD (1) Tj 0 -12.5 TD (2) Tj 0 -12.5 TD (3) Tj 0 -12.5 TD (45) Tj ET endstream endobj /Length 305 يوضح هذا الحقل عدد البايتات الموجودة في كلمة تدفقإلى الكلمة نهاية المسار

الخيار الأبسط هو دفق البيانات غير المشفرة وغير المضغوطة في الكائن تدفق. يقتصر على المشغلين بي تيو إت

BT يبدأ كائنًا نصيًا - يميز بداية النص وينهي كائن النص. - يميز نهاية النص /F12 9 Tf

  • /F12هذا هو الاسم الرمزي للكائن الذي يميز الخط المستخدم في هذه الصفحة
  • 9 هذا هو حجم الخط
  • تفهذا عامل يميز أن هذا الخط في الكائن البخاري هو إعداد الخط والحجم
10,782 TD هي الأرقام التي يبدأ منها هذا السطر (يتم العد من الزاوية اليسرى العليا) Tj هو عامل الخط الجديد حسنًا، يوجد النص بين قوسين

لا أشرح الدفق المشفر هنا. لأنه يعتمد على خوارزميات RC4، RC5، MD5.

ما هو الكائن الخط 12 0 كائن>

  • / النوع / الخطبطبيعة الحال اسم النوع
  • /النوع الفرعي /النوع1اسم النوع الفرعي
  • /الاسم /F7 F7هذا هو الاسم الرمزي

يدعم PDF عدة أنواع من الخطوط. وهي مدرجة أدناه

  • النوع 1، بما في ذلك المجموعات الفرعية واللقطات الرئيسية المتعددة
  • النوع 3
  • تروتايب، بما في ذلك المجموعات الفرعية
  • اكتب 0
لأكون صادقًا، لم أفهم النوع 3، TrueType، بما في ذلك المجموعات الفرعية، النوع 0، لا أستطيع أن أقول أي شيء عنها
والنوع 1 هو الخطوط التالية Courier Courier-Bold Courier-BoldOblique Courier-Oblique Helvetica Helvetica-Bold Helvetica-BoldOblique Helvetica-Oblique Times-Roman Times-Bold Times-Italic Times-BoldItalic الرمز ZapfDingbats

20 0 obj > endobj هذا كائن ذو أسماء رمزية لخطوط النوع الأول. باستخدام هذا الاسم الرمزي، يمكنك بسهولة الحصول على الكائن نفسه الخط. 6 0 كائن>

الكل: أي الحد الأدنى يتكون من الكائنات التالية: "الكتالوج"، "الصفحات"، "الصفحة"، "الموارد"(يمكن أن يكون موجودًا بشكل اختياري كحقل في كائن الصفحة)، كائن غير مكتوب "تدفق"، مجموعة من الكائنات "الخط"

ماذا حدث ؟ في الواقع، هذا جدول نص عادي، يبدأ بالكلمة xrefويحتوي نصها على روابط لجميع الكائنات غير المباشرة في المستند. فيما يلي مثال XREF 0 27 0000000021 373 00000 N 0000001486 00000 N 0000001604 00000 N 0001725 00000 N 0000001850 00000 ن 0000001967 00000 ن 0000002084 00000 ن 0000002203 00000 ن 0000002326 00000 ن 0000002439 00000 ن 0000002558 00000 ن 0000000 024 000 01 ف 0000002751 00000 ن 0000002831 00000 ن 0000000000 00001 ف 0000002915 00000 ن 0000002955 00000 ن 0 27 هذه الأرقام تعني ما يلي:

  • 0 - رقم الكائن الأول في الجدول
  • 27- عدد عناصر الجدول

العنصر الأول في الجدول دائمًا يكون بالشكل " XXXXXXXXXX 65535 ف" حيث X عبارة عن رقم و65535 هي القيمة الافتراضية للعنصر الأول في الجدول. الرمز "f" يرمز إلى " حر"، أي أن الكائن غير مستخدم

دعونا نحلل عنصر هذا الجدول.

  • الأرقام العشرة الأولى هي الإزاحة من بداية الملف إلى بداية الكائن.
  • 0000000016 يعني أنه بعد 16 بايت من بداية الملف ستقابل أول ذكر للكائن، أي على سبيل المثال، 4 0 الهدف

الأرقام الخمسة الثانية هي رقم إنشاء الملف. إذا تم إنشاء الملف للتو، فستكون دائمًا صفرًا. إذا تم تعديل الملف، فإن هذا العدد يزيد بمقدار واحد. إنه، 0000000024 00001 ف

يحتوي ملف PDF الأساسي الذي أنشأناه للتو على جدول واحد فقط. ولكن، إذا تم تحرير الملف، فيمكن أن يكون هناك الكثير من هذه الجداول.

يتم تنفيذ العلاقة بين الجداول باستخدام العنصر الأخير وكلمة الكود startxref

يحتوي ملف PDF الأساسي الذي تم إنشاؤه حديثًا على جدول واحد فقط، ويوجد بعد الجدول عنصر جَرَّاروبعد المقطع الدعائي تأتي الكلمة الرمزية startxref، للإشارة إلى الإزاحة من بداية الملف إلى بداية الجدول، إليك مثال. Trailer > startxref 173 %%EOF وهذا يعني أنه بعد 173 بايت من بداية المستند، ستكون كلمة الكود موجودة xref. ولكن، إذا تم تحرير الملف، فسيبدو المقطع الترويجي الأخير في الملف كما يلي: xref 0 3 0000000000 65535 f 0000003609 00000 n 0000003832 00000 n Trailer<7a15ab3ed3999575ff2f3034104a82c1>] >> startxref 173 %%EOF ولكن، إذا أشرنا إلى الجدول الذي يشير إليه الارتباط بدايةxالمرجع 173، ثم سنجد الجدول التالي، وخلفه مقطورة سيكون لها حقل /السابق 3896 3 16 0000000016 00000 ن 0000000664 00000 ن 0000000936 00000 ن 0000001106 00000 ن 0000001133 00000 ن 0000001250 00000 ن 000000139 5 00000 ن 0000001811 00000 ن 0000001992 00000 ن 0000002180 00000 ن 0000002360 00000 ن 0000002760 00000 ن 0000003438 00000 ن 516 00 000 ن 0000000776 00000 ن 0000000916 00000 ن مقطورة<7a15ab3ed3999575ff2f3034104a82c1>] >> startxref 567 %%EOF

هذا الحقل /السابق 3896يوجهنا إلى الجدول السابق، والرابط بدايةxالمرجع 567يشير إلى الجدول التالي وهكذا إلى ما لا نهاية تقريبًا، حتى في الحقل التالي startxrefلن نرى 0 . وهذا يعني أننا قد قرأنا جميع الجداول.

هذه المقالة، بطبيعة الحال، تفتقر إلى كود المصدر. ومن هنا: يتم تقديم وحدتين رئيسيتين " PDFDocument"والمساعدة" PDFBaseFonts"

الملفات المرفقة مع المادة:

  • الكود المصدري للوحدات PDFDocument.pas وPDFBaseFonts.pas (16 كيلو بايت) تحديث من 23/09/2005 الساعة 7:02:00 صباحًا

مناقشة المادة [ 07/31/2006 06:33 ] 7 رسائل

في هذه المقالة سوف ننظر في كيفية إنشاء بنفسك بي دي إف-المستندات، وفي المقالة التالية سننظر في كيفية عرضها بي دي إف- المستندات في مشاريعك، بالإضافة إلى محتوى الطباعة، والتنقل عبر المستند، وما إلى ذلك.

لهذا نحن بحاجة إلى المكونات من علامة التبويب الهذيان. لنقم بتثبيت المكونات التي نحتاجها للعمل، وهي:

  • TRvNDRWriter
  • TRvRenderPdf
  • زر

عنصر TRvNDRWriterمخصص للتسجيل في بي دي إف-معلومات الملف (نص، رسم) عبر الدفق.

عنصر TRvRenderPdfمصممة لإنشاء ورسم المعلومات (النص، الرسم، وما إلى ذلك). حسنا، عندما تضغط على زر، سوف نقوم بإدخال شيء ما في موقعنا بي دي إف-ملف.

لن نكتب الكثير عن النظرية، ولكننا سننتقل مباشرة إلى البرمجة، ولكن يجب علينا أولاً إنشاء فراغ عادي بي دي إف-ملف ووضعه في جذر البرنامج. بجوار الحدث عند النقربالنسبة للزر الخاص بنا سنكتب الكود التالي:

الإجراء TForm1 Button1Click(Sender: TObject); تيارات فار: TMemoryStream؛ بدء التدفقات: = TMemoryStream. يخلق ؛

RvNDrWriter1. تيار := تيارات؛ RvNDRWriter1. ينفذ ؛

RvRenderPdf1. PrintRender(Streams, "test.pdf"); ShellExecute(Handle, nil, "test.pdf" , "" , "" , SW_SHOW) ; FreeAndNil(Streams); نهاية ؛ TRvNDRWriterنقوم بإنشاء دفق سنرسم فيه جميع المعلومات، ثم نبدأ في العرض، ونحدد الملف الذي سيتم سحب البيانات إليه، وفي النهاية نقوم بتدمير الدفق. هذا كل شيء الآن، نحن بحاجة إلى حدث يحدث عند رسم البيانات، حيث سنعرض جميع معلوماتنا. اختيار المكونونتصفح قائمة أحداث هذا المكون، وبعد ذلك نجد الحدث

OnPrint

وفي هذا الحدث نكتب الكود التالي: الإجراء TForm1 طباعة (المرسل: TObject)؛ ابدأ bmp: = TBitmap. يخلق ؛ bmp. LoadFromFile("test.bmp"); باستخدام RvNDRWriter1، ابدأ SetFont("Arial" , 16) ؛ FontColor: = clGreen; طباعة("نص الاختبار"); PrintHeader("بدء ملف PDF"، pjCenter) ؛ PrintFooter("إنهاء ملف PDF" , pjCenter) ; LineTo(10, 10) ; PrintBitmap(1, 1, 1, 1, bmp) ; نهاية ؛ FreeAndNil(bmp); نهاية ؛حسنًا، أولاً، نقوم بتحميل الصورة. *.bmp، متغير بشكل طبيعي بي دي إف bmp

، لدينا كائن فئة TBitmap. نقوم بتنزيله ثم رسمه في ملفنا -وثيقة.وبعد ذلك، أعتقد أن كل شيء واضح، الإجراء رأس الطباعة- يعرض النقش في عنوان الوثيقة (الصفحة)، الإجراء طباعة التذييل- يعرض النقش في نهاية الوثيقة (الصفحة). إجراء طباعة نقطية- إخراج صورة إلى مستند أو إجراء

SetFont

  • - يحدد خط الوثيقة، الإجراء
  • لون الخط

- ضبط لون خط الوثيقة.

هناك طريقتان رئيسيتان لتنظيم عرض مستندات PDF في البرنامج.

  • استيراد مكتبة النوع أو المكونات؛
  • في الواقع، استخدام الأدوات المستوردة في التطبيق.
استيراد المكوناتاكتف اكس

لاستيراد المكونات، استخدم أمر "المكون" - "استيراد المكون" في قائمة دلفي الرئيسية. يتم تنفيذ عملية الاستيراد نفسها كمعالج.

في الصفحة الأولى من المعالج، حدد "استيراد عنصر تحكم ActiveX".

بعد ذلك، عليك أن تقرر ما يجب القيام به مع المكونات المستوردة. وبما أننا نخطط لاستخدامها كمكونات دلفي، حدد "تثبيت إلى حزمة جديدة".

الآن كل ما تبقى هو تحديد اسم الحزمة التي تم إنشاؤها حديثًا.

بعد النقر على زر "إنهاء"، سيتم استيراد مكونات ActiveX الخاصة بعارض PDF إلى دلفي.

منظرPDF في المرفق

لإنشاء عارض PDF في تطبيق يستخدم ActiveX، فإنك تحتاج إلى مكون TAcroPDF. عملية الاستيراد موصوفة بالتفصيل أعلاه.

على سبيل المثال، لنقم بإنشاء التطبيق التالي. لنضع مكونات TAcroPDF وTOpenDialog وTButton في النموذج كما هو موضح في لقطة الشاشة أدناه.

عند النقر فوق الزر، نقوم باستدعاء مربع حوار فتح ملف لتحديد ملف PDF لعرضه.

في هذا المثال، سنحتاج إلى المكونات التالية، الموجودة في علامة التبويب Rave. وهكذا، دعونا نبدأ في تثبيت المكونات التي نحتاجها، وهي:

  • TRvNDRWriter
  • TRvRenderPdf
  • زر

أقترح التطرق قليلاً إلى هذه المكونات وفهم ما تخدمه. وبالمناسبة، حصلت على معلومات عنهم من كتابين اشتريتهما progbook.ru. لذلك، إذا كنت ترغب في شراء كتب جيدة على دلفي، فنحن نرحب بك لزيارة هذا المتجر.

لذلك، لدينا أولاً مكون TRvNDRWriter. نحتاج إلى هذا المكون لكتابة المعلومات في ملف pdf، بغض النظر عن النص أو الرسم، من خلال الدفق.

الإجراء TForm1.Button1Click(Sender: TObject); فار تيارات:TMemoryStream; ابدأ التدفقات:=TMemoryStream.create; RvNDrWriter1.Stream:=Streams; RvNDRWriter1.Execute; RvRenderPdf1.PrintRender(Streams, "test.pdf"); ShellExecute (Handle، nil، "test.pdf"، ""، ""، SW_SHOW)؛ FreeAndNil(Streams); نهاية؛

المكون التالي هو TRvRenderPdf. نحن بحاجة إليها لإنشاء المعلومات، أو بالأحرى رسمها، سواء كانت نصية أو رسومية. وبناءً على ذلك، بعد النقر على الزر، سنكتب المعلومات التي نحتاجها في ملف pdf الخاص بنا.

لكن دعونا لا نتكلم كثيرا، ولكن دعونا ننتقل مباشرة إلى الموضوع الذي يهمنا، وهو البرمجة :)

أولاً، نحتاج إلى إنشاء ملف pdf عادي فارغ ووضعه في المجلد الجذر لبرنامجنا.

في الواقع، باستخدام هذا الرمز، نقوم بإنشاء دفق حيث سنرسم المعلومات التي نحتاجها، وبعد ذلك نبدأ في العرض، ونشير إلى ملف pdf النهائي الذي سيتم سحب البيانات إليه وفي النهاية نغلق الدفق.

بعد تنفيذ هذا متى، نحتاج إلى حدث يحدث عند رسم البيانات؛ في هذا الحدث سنعرض المعلومات التي نحتاجها.

دعونا نلقي نظرة على الكود. في البداية، أقوم بتحميل صورة *.bmp، وإنشاء متغير bmp، وكائن من فئة TBitmap. أقوم بتنزيله حتى أتمكن بعد ذلك من الرسم في ملف pdf الخاص بنا.

أعتقد أنه لا يستحق وصف كل شيء بشكل أكثر وضوحًا، وبالتالي، يضيف إجراء PrintHeader نقشًا إلى رأس المستند، ويضيف إجراء PrintFooter نقشًا إلى نهاية المستند. يضيف الإجراء PrintBitmap صورة إلى المستند، ويقوم الإجراء SetFont بتعيين خط المستند المطلوب، ويقوم الإجراء FontColor بتعيين لون خط المستند المطلوب.

جميع الوظائف والإجراءات الرسومية اللاحقة هي نفسها تمامًا عند عرض المعلومات الرسومية على Canvas الخاصة بالمكونات الأخرى.

أستخدم وظيفة NewPage لإنشاء ورقة جديدة في مستند. سيتم عرض كل ما سيتم إضافته بعد ذلك لعرض المعلومات على ورقة جديدة من المستند.

مهمبحيث تكون كافة الوحدات: RpRender، RpRenderPDF، RpDefine، RpBase، RpFiler، RpRave، RpCon متصلة بالمشروع!