يعرض HotPDF صفحة PDF محمَّلة عبر نقطة دخول واحدة، RenderLoadedPageToDevice، والجهاز الذي تسلّمه يقرر إن كانت النتيجة صورة نقطية، أو رسمًا على سياق جهاز خارجي كلوحة طابعة، أو ملف متجه معزَّز. اضبط RenderOverprintPreview إلى True وسيحاكي الاستدعاء نفسه الطباعة الفائقة لأحبار CMYK، فيرى المشغّل على الشاشة تفاعل الحبر الذي كان سيظهر فقط على ورق المطبعة
تلك الميزتان تحلّان مشكلتين مختلفتين تصادفانهما في مسار الكود نفسه. يزيل تجريد الجهاز الفرع الذي كان لكلٍّ من المعاينة والطباعة والتصدير استدعاء عرض خاص به بانحرافه الخاص. ويزيل تنقيح الطباعة الفائقة فئة خطأ الإنتاج حيث يبدو المستند صحيحًا في كل عارض ويخرج من المطبعة خاطئًا
لماذا تطبع الصفحة بشكل مختلف عن معاينتها؟
لأن الطباعة الفائقة تعليمات لجهاز التصوير، لا عملية رسم. حين تضبط الصفحة /OP أو /op على true في حالة الرسوم، فإنها تخبر RIP ألا يزيح الأحبار تحتها — جسم سماوي مرسوم فوق أصفر يترك الأصفر مكانه، والورقة تُظهر أخضر. عارض يتجاهل الطباعة الفائقة يزيح طبيعيًا ويُظهر سماويًا. لا أحد منهما خطأ بمعاييره، وهذا بالضبط المشكلة: الشاشة والمطبعة لا تتفقان، ولا أحد يعلم حتى تعود الأدلة
يجعل RenderOverprintPreview HotPDF يأخذ التعليمات على محمل الجد لطلاءات DeviceCMYK تحكمها /OP و/op و/OPM 1. النتيجة معاينة تنقيح لا معاينة عارض: الأسود الطباع فوق صبغة يبقى طًبّا غنيًا بدلًا من حفر ثقب، وطباعة فائقة عرضية من مصمّم على نص أبيض تصبح مرئية كالنص المختفي الذي ستكون عليه
var
Pdf: THotPDF;
Device: THPDFBitmapRenderDevice;
Proof: TBitmap;
begin
Pdf := THotPDF.Create(nil);
try
Pdf.LoadFromFile('cover-cmyk.pdf');
Pdf.RenderOverprintPreview := True; // proof, not plain preview
Device := THPDFBitmapRenderDevice.Create;
try
if Pdf.RenderLoadedPageToDevice(0, 150, Device) then
begin
Proof := Device.TakeBitmap; // ownership moves to the caller
try
Image1.Picture.Assign(Proof);
finally
Proof.Free;
end;
end;
finally
Device.Free;
end;
finally
Pdf.Free;
end;
end;
يشارك الإعداد في هوية ذاكرة العرض المؤقت، في الذاكرة وعلى القرص، فلا تتشارك معاينة عادية ومعاينة تنقيح صورة نقطية أبدًا. تبديل الخاصية لا يتطلب منك إبطال أي شيء يدويًا — ذاكرة مؤقتة تُعيد الخطأ من الاثنين أسوأ من لا ذاكرة مؤقتة إطلاقًا
ثلاثة أجهزة، استدعاء عرض واحد
THPDFRenderDevice صنف مجرّد بعضوانين مهمين: Kind، الذي يُبلِّغ عن الهدف كـ rdkBitmap أو rdkDeviceContext أو rdkEnhancedMetafile، وExecute، الذي تستدعيه المكتبة. تُشحَن ثلاثة أجهزة محددة مع HotPDF، وكلٌّ يملك إخراجه بشكل مختلف
يمتلك THPDFBitmapRenderDevice صورة TBitmap حتى ينقل TakeBitmap الملكية إليك. يأخذ THPDFDeviceContextRenderDevice HDC موجودًا مسبقًا زائد عرض وارتفاع ويرسم مباشرة فيه، وهكذا ترسم على لوحة طابعة بلا رحلة ذهاب وإياب للصورة النقطية. يمتلك THPDFMetafileRenderDevice صورة TMetafile حتى ينقلها TakeMetafile، وهذا يحافظ على المحتوى المتجه كمتجهات للمستهلكين الذين يحتاجونها
var
Device: THPDFDeviceContextRenderDevice;
begin
Printer.BeginDoc;
try
Device := THPDFDeviceContextRenderDevice.Create(
Printer.Canvas.Handle, Printer.PageWidth, Printer.PageHeight);
try
Pdf.RenderLoadedPageToDevice(PageIndex, 300, Device);
finally
Device.Free;
end;
finally
Printer.EndDoc;
end;
end;
قراءة Kind بدلًا من اختبار الصنف وقت التشغيل متعمَّدة. كود التطبيق يوزّع على نوع الجهاز يستمر في العمل حين يُغلَّف الجهاز أو يُزخرف أو يُستبدَل، والكود الذي يختبر is THPDFBitmapRenderDevice لا يفعل
ماذا يعني نقل الملكية عمليًا
قبل TakeBitmap أو TakeMetafile، يملك الجهاز الكائن ويُحرّره في مُدمِّره. بعد الاستدعاء، تملكه أنت والجهاز لم يعد يفعل. كلا النمطين شرعيّان: استخدم خاصية Bitmap أو Metafile حين يلزم أن يبقى الكائن حيًّا بعد استدعاء العرض فقط، وخذ الملكية حين يبقى الكائن حيًّا بعد الجهاز
نمط الفشل هو نمط Delphi العادي. خذ الصورة النقطية، أُحرر الجهاز، انسَ تحرير الصورة النقطية، فتملك تسريبًا ينمو مع عدد الصفحات — غير مرئي على اختبار خمس صفحات وواضح على دفعة خمسمئة صفحة. غلّف كلا الكائنين في try/finally خاص بهما بدلًا من المشاركة في واحد، فيُجيب سؤال الملكية عن نفسه
تنقيح الطباعة الفائقة والشفافية في الصفحة نفسها
إزاحة مجموعة الشفافية تبقى نشطة حين يكون معاينة الطباعة الفائقة مفعّلة، ويُركَّب كلاهما في مسار لقطة الرسم المحدودة نفسه. هذا يهم لأن ملفات الطباعة الجاهزة الحقيقية تخلط الاثنين باستمرار: مجموعة شفافية تحمل عملًا فنيًا تجلس على خلفية أسودها مضبوط على الطباعة الفائقة، ومحاكاة أحدهما دون الآخر يُنتج دليلًا خاطئًا بطريقة جديدة بدلًا من صحيح
ابقَ الحدود في الحسبان. معاينة الطباقة الفائقة تحاكي سلوك حبر العملية لطلاءات DeviceCMYK تحت ضوابط الطباعة الفائقة المسمّاة أعلاه. هي دليل تفاعل الحبر، لا دليل عقد مُدار بالألوان: لا يستبدل سير عمل ICC، ولا يخبرك بما ستنتجه مطبعة وورق بعينها. تعامل معها كما يتعامل مشغّل ما قبل الطباعة مع معاينة الطباعة الفائقة في عارض احترافي — كالفحص الذي يلتقط الأخطاء التي لا يلتقطها أحد بالنظر إلى معاينة عادية
ملاءمة التنقيح في خطوة فحص مسبق
المكان المفيد لهذا بجوار الفحوص التي تشغّلها أصلًا. يُبلِّغ فحص مسبق أن النص الأسود مضبوط على الطباعة الفائقة؛ ويعرض التنقيح للمشغّل ما يعنيه ذلك على الصفحة؛ وكلاهما يذهب إلى التقرير نفسه. للألوان الفردية، التي ترافق الطباعة الفائقة كثيرًا في أعمال التغليف، يغطي شرح عرض الألوان الفردية Separation وDeviceN جانب الصبغ في الصفحة نفسها، بينما تغطي ملاحظات عرض صفحة PDF إلى صورة نقطية وطباعة PDF محمَّل عبر TPrinter هدفي الجهاز في صيغتهما العادية غير التنقيحية
يعرض HotPDF وينقّح ويطبع صفحات PDF المحمَّلة من كود VCL أصلي من أجل Delphi وC++Builder، بلا DLL عرض خارجي لنشره بجانب التطبيق — صفحة مكوّن HotPDF فيها قائمة ميزات العرض وبناء تجريبي