مقال تقني

تحويل PDF إلى فضاء لوني واحد في Delphi

ينقل RecolorDocument ملف PDF كاملًا إلى فضاء لوني واحد، ويفعل RecolorPage الشيء نفسه لصفحة واحدة. كلاهما يأخذ 1 لتدرّج الرمادي و2 لـ RGB و3 لـ CMYK، ويُعيد كم لونًا حُوِّل. تبقى الهندسة والنص والصور تمامًا حيث كانت؛ يتغير اللون فقط

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

ما الذي يُحوَّل، وبأي ترتيب

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

تأتي الصور تاليًا، وهي الجزء الذي كان مفقودًا. مستند حُوِّل إلى رمادي بعوامل تشغيله فقط لا يزال يُظهر صورًا ملوّنة على صفحات رمادية، وهو أسوأ من أيٍّ الطرفين. تُحوَّل الصورة حين تحمل ثمانية بتات لكل مكوّن، وفضاء لون جهاز، وإما بلا ضغط أو Flate عادي فقط

الصور المفهرسة تُحوَّل عبر جدول ألوانها: تُحوَّل اللوحة ويحتفظ كل عيّنة بالفهرس الذي يحمله فعلًا. هذا يغطي صور اللوحة التي تُحفَظ عادةً كلقطة شاشة أو رسم بياني، ويحوّلها أياً كانت عيّناتها مضغوطة أو مرصوصة، لأن العيّنات لا تتغير أبدًا

var
  Lib: TPDFlib;
  Converted: Integer;
begin
  Lib := TPDFlib.Create;
  try
    Lib.LoadFromFile('brochure.pdf', '');
    Converted := Lib.RecolorDocument(1);       // 1 grey, 2 RGB, 3 CMYK
    Log(Format('%d colours converted', [Converted]));
    Lib.SaveToFile('brochure-grey.pdf');
  finally
    Lib.Free;
  end;
end;

لماذا تُترَك JPEG كما هي؟

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

تُترَك أقنعة النعومة وأقنعة القوالب لسبب مختلف. كلاهما يُقرَأ كتغطية لا ك لون، وتحويل أحدهما يترك الصفحة تُظهر القناع كصورة — قناع شفافية يُعرض كعمل رمادي فوق المحتوى الذي يُفترَض أن يشكّله. تركها ليس قيدًا للتفاف حوله؛ هو النتيجة الصحيحة

الألوان المضبوطة عبر فضاء ICCBased أو Separation أو Indexed أو Pattern تُترَك أيضًا كما هي عند مستوى عامل التشغيل. تحويلها دون قراءة ملفات تعريفها يغيّر مظهر الصفحة بدلًا من الحفاظ عليه، وعملية إعادة التلوين التي وعدتها الكامل هو الحفاظ لا يمكنها تخمين الملفات التعريفية

التدرّجات تُحوَّل مع محطاتها التي خلفها

التدرّج فضاء لوني زائد دالة تنتج ألوانًا فيه، وتحويل أحدهما دون الآخر ينتج هراءً — تدرّج محوَّل تُركت محطاته يُقرَأ كقناة يُخطَأ في قراءتها كمستوى رمادي، وهذا على الصفحة يبدو كشريط من لون خاطئ تمامًا. فضاء التدرّج اللوني ومحطاته تنتقل معًا

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

نوعان يُترَكان عمدًا كما هما. تدرّج مبني من دالة معيَّنة أو PostScript يحتفظ بتعريفه، وكذلك أنواع الشبكة التي تحمل ألوانها في دفق بدلًا من دالة. إعادة كتابة أي منهما عملية مختلفة عن تحويل لون، والقيام بها بصمت داخل عملية إعادة تلوين سيكون مفاجأة

// Convert a single page - useful when only the cover needs to change
Lib.SelectPage(1);
Lib.RecolorPage(3);          // this page to CMYK
Lib.SaveToFile('cover-cmyk.pdf');

أين يتناسب إعادة التلوين قبل تسليم مطبعة

استخدمه كخطوة تطبيع، لا كإدارة لون. إعادة التلوين تحوّل القيم بين فضاءات الأجهزة؛ لا تطبّق ملف تعريف ICC، ولا تحترم نيّة العرض، ولا تحاكي حالة مطبعة. لعمل يلزم أن يصيب دليل عقد، فسير العمل المبني على ملف التعريف هو الجواب، وإعادة التلوين على أكثر تقدير خطوة تضع كل شيء في فضاء واحد أولًا

مكان ربحه هو مشكلة الإنتاج المعتادة: تسليم يلزم أن يكون رماديًا ويصل بشعار RGB، أو مستند داخلي يُمنَع طباعته بالألوان، أو دفعة ملفات يلزم أن تكون في فضاء واحد قبل أن يقبلها فحص مسبق. اقرنه بفحص — تغطي ملاحظات فحص PDF/A وPDF/UA المسبق ومنصّة الامتثال والتوقيع تشغيل الحُكم جزءًا من نفس المهمة

إن احتاج المستند فحص عمله المتجه بدلًا من تحويله، يغطي شرح الرسومات المتجهة والتظليلات والتدرّجات كيف تُبنى تلك الكائنات أصلاً، وهو سياق مفيد لفهم ما يمكن وما لا يمكن لعملية إعادة تلوين أن تصل إليه

PDFlibPas مكتبة Pascal أصلية لـ PDF من أجل Delphi وC++Builder وLazarus بلا مشغّل خارجي، فتعمل خطوة تطبيع الألوان داخل خدمتك بدلًا من الاستدعاء لمُحوِّل خارجي — انظر صفحة منتج PDFlibPas لواجهة معالجة المستندات الكاملة