تخطَّ إلى المحتوى

المقارنة بكسلًا ببكسل باستعمال PDFLang

يرسل المورّد الملف بعد تصحيحه. العمل صار في الجدول، والمطبعة محجوزة، وعلى أحدهم أن يجيب عن سؤال واحد قبل أن تدور الآلة: هل هذا هو المستند المعتمد وقد دخل عليه التصحيح، أم أنه شيء آخر؟

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

ما الذي يكلّفه الملف الخطأ

Section titled “ما الذي يكلّفه الملف الخطأ”

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

ثم يُعاد العمل كله من جديد، بالكلفة كاملة، بعد أن أُنفقت الميزانية مرة.

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

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

في مقابل ذلك كله، الفحص يكلّف ثوانٍ.

لماذا العين أداة غير مناسبة

Section titled “لماذا العين أداة غير مناسبة”

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

ويزداد الأمر سوءًا مع الحجم. لا أحد ينظر إلى الصفحة ١٨٠ كما نظر إلى الصفحة ٣. التركيز الذي يمسك الأشياء يُستهلك مبكرًا، ويحظى الثلث الأخير من مستند طويل بنظرة عابرة لا بفحص.

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

ماذا تعني «متطابقان» عند الآلة

Section titled “ماذا تعني «متطابقان» عند الآلة”

يرسم pdfl pixelcompare الملفين ويقارن شكلهما، صفحةً صفحة:

Terminal window
pdfl pixelcompare approved.pdf reprint.pdf

ويبلّغ عن ملاحظة واحدة لكل صفحة تغيّرت، مع نسبة ما تغيّر منها وعدد المواضع المنفصلة التي حدث فيها ذلك:

page 7: 0.51% of the pixels differ, in 29 area(s)

وهذا سؤال غير الذي يجيب عنه pdfl compare. ذلك الأمر ينظر إلى النص والبنية، وهذا ينظر إلى المظهر، والاثنان يختلفان أكثر مما تتوقع.

شعار انتقل مليمترين. خط شعري اختفى. لون خاص استُبدل بتركيبه من CMYK. النص في الحالات الثلاث متطابق، فتقول مقارنة النص إن الملفين متطابقان. وهما غير متطابقين على الورق، وهناك يكون الحساب.

أما الصفحة الموجودة في ملف وغير موجودة في الآخر فتُبلَّغ وحدها، إذ لا شيء تُقارن به.

البكسل أو البكسلان اللذان ليسا تغييرًا

Section titled “البكسل أو البكسلان اللذان ليسا تغييرًا”

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

لذلك تبحث المقارنة عن إزاحة واحدة تشمل الصفحة كلها، وتذكرها حين تجدها:

page 3: 2.10% of the pixels differ, in 44 area(s) (aligned by 2, -1 px)

وحين يكون الموضع نفسه هو ما تفحصه — عنصر يجب أن يقع في مكان محدد — يوقف --no-align ذلك.

النسبة المئوية تخبرك أن الصفحة تغيّرت، ولا تخبرك إن كان التغيير مقبولًا. لذلك لا بد أن يرى أحدهم:

Terminal window
pdfl pixelcompare approved.pdf reprint.pdf --viewer diff/

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

يعرض ثلاث لوحات جنبًا إلى جنب، على الصفحة نفسها دائمًا: الأصل، والملف الجديد، وكلاهما معًا وقد رُسمت الفروق فوقهما.

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

وتُرسم الفروق فوق الصفحة، ويدل اللون على نوعها:

اللون المعنى
أحمر حبر اختفى من الملف الجديد
أخضر حبر جديد فيه
أزرق الثقل نفسه بلون مختلف

وتكبّر عجلة الفأرة اللوحات الثلاث معًا، حتى ٨ أضعاف، حول النقطة التي تحت المؤشر — فيبقى ما كنت تنظر إليه في مكانه. وبالضغط على أي من زرَّي الفأرة مع التحريك تسحب الصفحة نفسها، في الثلاث دفعةً واحدة، وبها تبلغ زاويةً بعد التكبير. ويعيد Reset view التكبير والإزاحة والأشرطة إلى ما كانت عليه.

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

رمز الخروج يحمل الحكم، فيمكن وضع هذا أمام الآلة لا بجانبها: 0 إن لم تتغير صفحة أكثر مما سمحت به، و2 إن تغيّرت واحدة، و10 إن تعذّرت قراءة ملف أصلًا.

Terminal window
pdfl pixelcompare approved.pdf reprint.pdf --max-diff 0.1 --viewer diff/ || {
echo "إعادة الطباعة غير مطابقة — انظر diff/index.html"
exit 1
}

--max-diff هو حد التسامح: كم يجوز أن يتغير من الصفحة قبل أن يُحتسب. و--dpi يحدد دقة النظر — كلما ارتفع رأى أكثر واستغرق أطول. و--threshold و--blur يمتصّان الضجيج الصغير الذي ينتجه الرسم.

يجري الفحص في ثوانٍ، ويعطي الجواب نفسه في كل مرة، ويترك خلفه تقريرًا وعارضًا بوصفهما سجلًا لما قُورن.

يوثّق فصل سطر الأوامر كل خيارات pixelcompare، ومعه compare لسؤال النص والبنية. والوصفات العملية تضع الاثنين داخل مسارات كاملة — مطبعة تقابل ملف الطباعة بالتجربة المعتمدة، ودار نشر تقابل إعادة طباعة بالطبعة الموجودة في المكتبات.

DigitalOceanشكرًا لـ DigitalOcean على استضافة هذا الموقع.