Hello World من Delphi HotPDF Component
مرحبا بكم في الدليل الشامل لبرنامج العرض التوضيحي Delphi HotPDF Component HelloWorld!
حول مكون HotPDF
HotPDF Component هي مكتبة معالجة PDF قوية ومتعددة الاستخدامات مصممة خصيصا لمطوري Delphi و C ++ Builder. يوفر هذا المكون الشامل واجهة برمجة تطبيقات شاملة تمكن المطورين من إنشاء مستندات PDF ومعالجتها وتعديلها بسهولة ودقة.
الميزات الرئيسية لمكون HotPDF:
- إنشاء وإنشاء ملفات PDF: قم بإنشاء مستندات PDF من البداية مع التحكم الكامل في التخطيط والتنسيق والمحتوى
- دعم النص والرسومات: إضافة نص وصور وأشكال ورسومات معقدة إلى صفحات PDF
- دعم متعدد اللغات: دعم Unicode الكامل لعرض النص الدولي
- إدارة الخطوط: تضمين الخطوط للحصول على مظهر متناسق للمستندات عبر أنظمة مختلفة
- خيارات الضغط: استخدام خوارزميات الضغط لتحسين حجم الملف
- ميزات الأمان: تشفير المستندات والحماية بكلمة مرور وعناصر التحكم في الأذونات
- معالجة المستندات: دمج مستندات PDF الموجودة وتقسيمها وتعديلها
- دعم الجدول والنماذج: إنشاء جداول معقدة ونماذج تفاعلية
نظرة عامة على برنامج HelloWorld.dpr
يعمل برنامج HelloWorld.dpr
المثال كمقدمة ممتازة للميزة الأساسية والأكثر أهمية في مكون HotPDF: وظيفة TexOut. يعرض هذا البرنامج التوضيحي أيضا وظيفة إنشاء PDF الأساسية.
الوظائف الأساسية:
1. PDF مستند الإنشاء
تتمثل الوظيفة الأساسية للبرنامج في إنشاء مستندات PDF تحتوي على نص “Hello World” متعدد اللغات. CreatePDF
يوضح الإجراء:
- تهيئة المكون: الإعداد والتكوين المناسبان لمكون THotPDF
- خصائص المستند: إعداد البيانات الوصفية مثل خيارات الضغط وتضمين الخط
- عرض نص متعدد اللغات: عرض النص ب 11 لغة مختلفة بما في ذلك الإنجليزية والإسبانية والألمانية والفرنسية والإيطالية والبرتغالية والروسية واليابانية والتركية والصينية والكورية
- إدارة الخطوط: استخدام خط Arial Unicode MS لدعم العرض متعدد اللغات
- ضغط: إنشاء مستند PDF مضغوط
2. إدارة النوافذ وتكامل النظام
يشتمل البرنامج على وظيفة تعد النوافذ المتطورة التي توضح:
- تعداد نوافذ النظام: استخدام وظيفة واجهة برمجة تطبيقات
EnumWindows
Windows للتكرار من خلال جميع نوافذ المستوى الأعلى - مطابقة عنوان النافذة: تنفيذ مطابقة السلسلة الفرعية لتحديد التطبيقات المستهدفة
- إغلاق النافذة الآلي: إرسال
WM_CLOSE
رسائل لإغلاق عارضات PDF التي قد تكون الملفات مفتوحة بها - منع النزاعات: ضمان عدم حدوث تعارضات في الوصول إلى الملفات عند إنشاء ملفات PDF جديدة
3. معالجة الأخطاء وإدارة الموارد
يوضح البرنامج أفضل الممارسات من أجل:
- إدارة الذاكرة: الإنشاء السليم والتخلص من مثيلات المكونات
- سلامة الاستثناء: استخدام كتل try-final لضمان تنظيف الموارد
- ملاحظات المستخدم: توفير مخرجات وحدة التحكم لإعلام المستخدمين بتقدم البرنامج
تفاصيل التنفيذ الفني:
تقنية الضغط
يقوم البرنامج بإنشاء مستند PDF باستخدام ضغط FlateDecode
استراتيجية التعامل مع الخط
يستخدم البرنامج استراتيجية اختيار خط متطورة:
- Arial Unicode MS: يستخدم لمعظم اللغات نظرا لدعمه الواسع للأحرف
- تضمين الخط: يضمن مظهرا متناسقا عبر الأنظمة المختلفة
التوافق عبر الإصدارات
يتضمن الكود توجيهات التجميع الشرطي لدعم كل من إصدارات دلفي الحديثة والقديمة:
- دعم XE2+: يستخدم الوحدات ذات الأسماء (WinApi.Windows و System.SysUtils وما إلى ذلك)
- دعم الإرث: يعود إلى أسماء الوحدات التقليدية لإصدارات دلفي القديمة
القيمة التعليمية
يخدم مثال HelloWorld هذا أغراضا تعليمية متعددة:
- مقدمة المكون: يوفر مقدمة لطيفة لاستخدام مكونات HotPDF
- أفضل الممارسات: يوضح الإدارة المناسبة للموارد ومعالجة الأخطاء
- تكامل النظام: يوضح كيفية دمج إنشاء PDF مع عمليات نظام Windows
- تدويل: يوضح معالجة النص متعدد اللغات في مستندات PDF
الشروع
لتشغيل هذا المثال من البرنامج:
- تأكد من تثبيت مكون HotPDF بشكل صحيح في Delphi IDE الخاص بك
- افتح ملف مشروع HelloWorld.dpr
- تجميع البرنامج وتشغيله
- سيقوم البرنامج تلقائيا بإنشاء ملف PDF بالضغط
- افحص الملفات التي تم إنشاؤها لرؤية عرض النص متعدد اللغات
كود المصدر
فيما يلي شفرة المصدر الكاملة والموثقة جيدا لبرنامج HelloWorld التوضيحي:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
{************************************************************} // مكون HotPDF PDF // حقوق الطبع والنشر (c)2007-2025، https://www.loslab.com {************************************************************} // برنامج تجريبي HelloWorld لمكون HotPDF // يوضح هذا البرنامج قدرات إنشاء PDF الأساسية // بما في ذلك دعم النص متعدد اللغات وخيارات الضغط {************************************************************} program HelloWorld; {$APPTYPE CONSOLE} // نوع تطبيق وحدة التحكم {$I ..\..\.\Lib\HotPDF.inc} // تضمين ملف تكوين HotPDF uses // وحدات EurekaLog لاكتشاف تسريب الذاكرة والتصحيح (اختياري) {$IFDEF EurekaLog} EMemLeaks, // اكتشاف تسريب الذاكرة EResLeaks, // اكتشاف تسريب الموارد EDebugJCL, // دعم تصحيح JCL EDebugExports, // تصدير معلومات التصحيح EFixSafeCallException, // معالجة استثناءات SafeCall EMapWin32, // دعم تخطيط Win32 EAppConsole, // دعم تطبيق وحدة التحكم EDialogConsole, // دعم حوار وحدة التحكم ExceptionLog7, // تسجيل الاستثناءات {$ENDIF EurekaLog} // وحدات النظام - مساحات أسماء مختلفة لـ Delphi XE2+ {$IFDEF XE2+} WinApi.Windows, // دوال Windows API WinApi.Messages, // ثوابت رسائل Windows System.SysUtils, // أدوات النظام System.Classes, // الفئات الأساسية (TStringList، إلخ) Vcl.Graphics, // دعم الرسوميات {$ELSE} Windows, // دوال Windows API (Delphi الأقدم) Messages, // ثوابت رسائل Windows (Delphi الأقدم) SysUtils, // أدوات النظام (Delphi الأقدم) Classes, // الفئات الأساسية (Delphi الأقدم) Graphics, // دعم الرسوميات (Delphi الأقدم) {$ENDIF} HPDFDoc; // وحدة مكون HotPDF الرئيسية // ينشئ ملف PDF مضغوط مع نص "Hello World" متعدد اللغات // المعاملات: // FileName: اسم ملف PDF الناتج procedure CreatePDF(const FileName: string); var HotPDF: THotPDF; // مثيل مكون HotPDF الرئيسي begin // إنشاء مثيل مكون HotPDF HotPDF := THotPDF.Create(nil); try // تكوين خصائص PDF HotPDF.AutoLaunch := true; // فتح PDF تلقائياً بعد الإنشاء HotPDF.FileName := FileName; // تعيين اسم الملف الناتج // تمكين ضغط FlateDecode HotPDF.Compression := cmFlateDecode; // تمكين ضغط FlateDecode WriteLn('Creating compressed PDF: ', FileName); HotPDF.FontEmbedding := true; // تضمين الخطوط لتوافق أفضل HotPDF.BeginDoc; // بدء إنشاء مستند PDF // تعيين خط Unicode لدعم النص متعدد اللغات // Arial Unicode MS يدعم معظم اللغات باستثناء الكورية // procedure SetFont ( FontName: AnsiString; FontStyle: TFontStyles; ASize: Single; FontCharset: TFontCharset = DEFAULT_CHARSET; IsVertical: boolean = false); // DEFAULT_CHARSET: 1 - يتم اختيار الخط بناءً على الاسم. إذا لم يكن الخط المحدد متاحاً على النظام، فسيستبدل Windows خطاً آخر HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 1, False); // عرض "Hello World" بلغات متعددة // معاملات TextOut: (X, Y, Angle, Text) HotPDF.CurrentPage.TextOut(80, 50, 0, 'Hello, Delphi PDF world!'); // الإنجليزية HotPDF.CurrentPage.TextOut(80, 70, 0, 'Hola, mundo Delphi PDF!'); // الإسبانية HotPDF.CurrentPage.TextOut(80, 90, 0, 'Hallo, Delphi PDF Welt!'); // الألمانية HotPDF.CurrentPage.TextOut(80, 110, 0, 'Bonjour, monde PDF Delphi!'); // الفرنسية HotPDF.CurrentPage.TextOut(80, 130, 0, 'Ciao, mondo Delphi PDF!'); // الإيطالية HotPDF.CurrentPage.TextOut(80, 150, 0, 'Olá, mundo Delphi PDF!'); // البرتغالية HotPDF.CurrentPage.TextOut(80, 170, 0, 'Здравствуйте, Delphi PDF мир!'); // الروسية HotPDF.CurrentPage.TextOut(80, 190, 0, 'こんにちは、Delphi PDFの世界!'); // اليابانية HotPDF.CurrentPage.TextOut(80, 210, 0, 'Merhaba, Delphi PDF dünyası!'); // التركية HotPDF.CurrentPage.TextOut(80, 230, 0, '你好,Delphi PDF世界'); // الصينية HotPDF.CurrentPage.TextOut(80, 250, 0, '여보세요, Delphi PDF 세계!'); // الكورية HotPDF.EndDoc; // إنهاء وحفظ مستند PDF WriteLn('PDF created successfully: ', FileName); finally HotPDF.Free; // تنظيف مكون HotPDF end; end; // متغيرات عامة لتعداد النوافذ وإنشاء PDF var Title: String; // سلسلة عنوان فردية (غير مستخدمة في التنفيذ الحالي) Titles: TStrings; // قائمة عناوين النوافذ للبحث عنها Window: HWND; // مقبض النافذة (غير مستخدم في التنفيذ الحالي) WindowText: array [0 .. 255] of Char; // مخزن مؤقت لنص النافذة (غير مستخدم في التنفيذ الحالي) WindowTitle: String; // سلسلة عنوان النافذة (غير مستخدمة في التنفيذ الحالي) I: Integer; // عداد الحلقة (غير مستخدم في التنفيذ الحالي) // دالة استدعاء لـ EnumWindows API // يتم استدعاء هذه الدالة لكل نافذة عليا في النظام // المعاملات: // hWnd: مقبض النافذة الحالية التي يتم تعدادها // lParam: بيانات محددة من المستخدم (في حالتنا، مؤشر إلى TStrings مع العناوين المستهدفة) // الإرجاع: True لمتابعة التعداد، False للتوقف function EnumWindowsProc(HWND: HWND; lParam: lParam): BOOL; stdcall; var Titles: TStrings; // قائمة عناوين النوافذ المستهدفة I: Integer; // عداد الحلقة WindowText: array [0 .. 255] of Char; // مخزن مؤقت لتخزين نص النافذة WindowTitle: String; // عنوان النافذة الحالية كسلسلة begin Result := true; // متابعة التعداد افتراضياً Titles := TStrings(lParam); // تحويل lParam إلى TStrings // الحصول على نص عنوان النافذة if GetWindowText(HWND, WindowText, SizeOf(WindowText)) > 0 then begin WindowTitle := String(WindowText); // تحويل مصفوفة الأحرف إلى سلسلة // التحقق من احتواء عنوان النافذة على أي من السلاسل المستهدفة for I := 0 to Titles.Count - 1 do begin // استخدام دالة Pos للتحقق من احتواء عنوان النافذة على السلسلة المستهدفة if Pos(Titles[I], WindowTitle) > 0 then begin // إرسال رسالة WM_CLOSE لإغلاق النافذة PostMessage(HWND, WM_CLOSE, 0, 0); Break; // الخروج من الحلقة بعد العثور على أول تطابق end; end; end; end; // يبدأ تنفيذ البرنامج الرئيسي هنا begin try // إغلاق أي ملفات PDF موجودة قد تكون مفتوحة في عارضات PDF // هذا يمنع تعارضات الوصول للملفات عند إنشاء ملفات PDF جديدة بنفس الأسماء Titles := TStringList.Create; try // تحديد قائمة بسلاسل فرعية من عناوين النوافذ للبحث عنها // أي نافذة تحتوي على هذه السلاسل سيتم إغلاقها // هذا سيغلق Adobe وFoxit PDF reader & editor والعديد من تطبيقات PDF الأخرى Titles.CommaText := '"HelloWorld.pdf", "Foxit"'; // تعداد جميع النوافذ العليا وإغلاق المطابقة منها // EnumWindows تستدعي دالة الاستدعاء الخاصة بنا لكل نافذة EnumWindows(@EnumWindowsProc, lParam(Titles)); finally Titles.Free; // تنظيف قائمة السلاسل end; // عرض رأس البرنامج WriteLn('=== HotPDF HelloWorld Demo ==='); WriteLn('يقوم هذا العرض التوضيحي بإنشاء ملف PDF مضغوط مع نص متعدد اللغات.'); WriteLn(''); // إنشاء PDF مضغوط CreatePDF('HelloWorld.pdf'); // عرض رسالة الإكمال WriteLn(''); WriteLn('تم إنشاء ملف PDF بنجاح!'); WriteLn('يستخدم ملف PDF ضغط FlateDecode للحصول على حجم ملف مثالي.'); WriteLn(''); WriteLn('اضغط Enter للخروج...'); ReadLn; // انتظار إدخال المستخدم قبل إغلاق وحدة التحكم except on E: Exception do begin WriteLn('خطأ: ' + E.Message); // عرض رسالة الخطأ WriteLn('اضغط Enter للخروج...'); // مطالبة المستخدم ReadLn; // انتظار إدخال المستخدم end; end; end. |