مقالة تقنية

رسم قماش HotPDF

يوضح هذا المثال لمكون HotPDF كيفية إنشاء رسومات PDF بنمط متجه باستخدام نفس سير عمل TCanvas الذي يستخدمه مطورو Delphi بالفعل في تطبيقات VCL. بدلاً من التعامل مع إخراج PDF كنموذج رسم منفصل، يكتب المثال النص والأشكال من خلال HotPDF.Canvas ثم يحفظ النتيجة كملف PDF.

هذا المثال مفيد عندما يحتوي التطبيق بالفعل على تعليمات برمجية لإنشاء مخططات أو رسوم بيانية أو معاينات أو عناصر تحكم مخصصة تعتمد على TCanvas. النمط الأساسي بسيط: قم بإنشاء THotPDF، وقم بتعيين ملف الإخراج، واستدعِ BeginDoc، وقم بتكوين حالة القماش، وارسم المحتوى، وأنهِ الملف باستخدام EndDoc.

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

لماذا يهم إخراج canvas

يعد الرسم بأسلوب canvas خياراً عملياً عندما يجب أن يحتوي PDF على هندسة مولدة بدلاً من صور منسوخة. يمكن للرسوم التخطيطية والتسميات ولوحات المعلومات وتراكبات الخرائط وزخارف النماذج والمخططات البسيطة أن تبقى حادة عند التكبير العالي لأنها تُرسم كعمليات PDF بدلاً من لقطات شاشة.

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

تخطيط الإحداثيات

  • عرّف أصل الصفحة والهوامش قبل نقل كود الرسم إلى الإنتاج.
  • احتفظ بالقياسات المتكررة في ثوابت مسماة حتى يمكن تحجيم التخطيط لاحقاً.
  • افصل تغييرات حالة الرسم، مثل Brush.Color، عن حلقة الأشكال عندما يحتاج الإخراج إلى أسلوب متوقع.
  • فضّل بيانات عينة ثابتة لاختبارات المقارنة الآلية.
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
program CanvasDraw;
{$APPTYPE CONSOLE}
uses
{$IFDEF VER230} System.SysUtils, System.Classes, Vcl.Graphics, {$ELSE} SysUtils, Classes, Graphics, {$ENDIF} HPDFDoc;
 
var
   I, Y: Integer;
   HotPDF: THotPDF;
 
begin
    HotPDF:= THotPDF.Create(nil);
    try
        Randomize;
        HotPDF.AutoLaunch := true;
        HotPDF.FileName := 'CanvasDraw.pdf';
        HotPDF.BeginDoc;                                          // Create PDF file
        HotPDF.Canvas.Font.Size := 14;                            // Set canvas font size
        I :=20;
        Y := 60;
        HotPDF.Canvas.TextOut(10, 30, 'Canvas Rectangles');      //  Print text
        while I <= 700 do
        begin                                                   //  Draw colour
            HotPDF.Canvas.Brush.Color := random($FFFFFF);         //  rectangles
            HotPDF.Canvas.Rectangle(I, Y, I+90, Y + 160);
            Inc(I, 30);
            Inc( Y, 3 );
        end;
 
        I :=20;
        Y := 350;
        HotPDF.Canvas.TextOut(10, 320, 'Canvas Ellipses');         // Print text
        while I <= 700 do                                       //  Draw colour
        begin                                                   //  ellipses
            HotPDF.Canvas.Brush.Color := random($FFFFFF);
            HotPDF.Canvas.Ellipse(I, Y, I+90, Y + 160);
            Inc(I, 30);
            Inc( Y, 3 );
        end;
 
        I :=20;
        Y := 680;
        HotPDF.Canvas.TextOut(10, 650, 'Canvas RoundRects');      // Print text
        while I <= 700 do
        begin
            HotPDF.Canvas.Brush.Color := random($FFFFFF);         //  Draw colour
            HotPDF.Canvas.RoundRect(I, Y, I+90, Y + 160, 20, 20); //  roundrects
            Inc(I, 30);                                        
            Inc( Y, 3 );
        end;
        HotPDF.EndDoc;                                            // Close PDF file
    finally
        HotPDF.Free;
    end;
end.

ما يوضحه المثال.

  • كيفية تهيئة THotPDF لمهمة إنشاء ملفات PDF بنمط وحدة التحكم باستخدام Delphi.
  • كيفية استخدام HotPDF.Canvas للرسم النصي والأشكال الهندسية الأساسية.
  • كيفية تأثير ألوان الفرشاة على الأشكال المملوءة في ملف PDF الذي تم إنشاؤه.
  • كيفية استخدام الإحداثيات المتكررة لإنشاء مخرجات مرئية متعددة الطبقات دون لقطات شاشة بتانية.

ملاحظات التنفيذ.

صفحة PDF لا يتم إنهاؤها إلا بعد استدعاء EndDoc، لذا يجب أن يحافظ الكود الإنتاجي على كتلة try/finally حول دورة حياة المكون لتجنب ترك ملف غير مكتمل في حالة فشل الرسم. للحصول على نتائج اختبار حتمية، استبدل Randomize والألوان العشوائية بقيم ألوان ثابتة.

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

قائمة التحقق

  • افتح PDF عند عدة مستويات تكبير وتأكد من بقاء الحواف نظيفة.
  • اطبع صفحة عينة إذا كان PDF مخصصاً للنماذج أو الملصقات الورقية.
  • تحقق من بقاء كل شكل داخل مربع الهوامش المقصود.
  • تأكد من بقاء النص قابلاً للقراءة عند استبدال Windows للخطوط.