ما الفرق بين pdfl compare و pdfl pixelcompare؟
أمران يأخذان ملفَّي PDF ويخبرانك بما تغيّر. يبدو ذلك تكرارًا، إلى أن يختلفا لأول مرة — عندها تكتشف أنهما لم يكونا يجيبان عن السؤال نفسه قط.
يسأل pdfl compare: ماذا يقول المستند.
ويسأل pdfl pixelcompare: كيف يبدو المستند.
وقد ينجح ملف في أحدهما ويسقط في الآخر، في الاتجاهين معًا.
pdfl compare: ماذا يقول المستند
Section titled “pdfl compare: ماذا يقول المستند”يقرأ النص والبنية والبيانات الوصفية:
pdfl compare approved_v1.pdf new_v2.pdfوما يستحق معرفته هو كيف يوائم بين الصفحات: بالمحتوى لا بالرقم. أدرج صفحة في منتصف عقد، فتبلّغ مقارنةٌ ساذجة عن كل صفحة بعدها بوصفها متغيّرة؛ أما هذه فتنتبه إلى الإدراج وتواصل مقابلة النظير بالنظير. ويصمد ذلك في مستندات تتجاوز الألف صفحة.
ويحصل كل زوج مُوائَم على درجة تشابه وعيّنة من الأسطر التي تحرّكت، - للمحذوف
و+ للمضاف:
page 4 → 4: similarity 97.8% | -original title | +revised titleتغيّر البيانات الوصفية تحذير. وتغيّر النص خطأ حين ينزل تحت الحد الذي تضعه، وتحذير حين يبقى فوقه.
# يتجاهل حالة الأحرف والمسافات والتواريخ — مفيد حين يُعاد توليد تاريخ# الإصدار مع كل تصدير ولا يكون هو موضع المراجعةpdfl compare approved_v1.pdf new_v2.pdf --normalize --ignore-dates
# يقبل فرقًا حتى ١٪، ويخرج شيئًا يقرأه إنسانpdfl compare v1.pdf v2.pdf --similarity-threshold 99 \ --output html --output-file diff.htmlpdfl pixelcompare: كيف يبدو المستند
Section titled “pdfl pixelcompare: كيف يبدو المستند”يرسم الملفين ويقارن الصفحات بوصفها صورًا:
pdfl pixelcompare approved.pdf reprint.pdfملاحظة واحدة لكل صفحة تغيّرت، مع نسبة ما اختلف منها وعدد المواضع المنفصلة:
page 7: 0.51% of the pixels differ, in 29 area(s)ويعوّض أولًا الإزاحة العامة، لأن الملف المُصدَّر من جديد من المصدر نفسه كثيرًا ما يستقر بفارق بكسل أو اثنين، ولولا ذلك لعُدّت حافة كل حرف فرقًا:
page 3: 2.10% of the pixels differ, in 44 area(s) (aligned by 2, -1 px)ويستطيع أن يكتب مكانًا تنظر فيه:
pdfl pixelcompare approved.pdf reprint.pdf --viewer diff/يضم ذلك المجلد الصفحات والفروق وملف index.html — بلا خادم وبلا شيء يُثبَّت.
الأحمر حبر اختفى، والأخضر حبر جديد، والأزرق الثقل نفسه بلون مختلف.
أين يختلفان
Section titled “أين يختلفان”النص متطابق والملف خطأ. شعار انتقل مليمترين. خط شعري اختفى. لون خاص استُبدل
بتركيبه من CMYK. يبلّغ compare عن تطابق تام في الحالات الثلاث، لأن حرفًا واحدًا
لم يتحرك. وpixelcompare يمسك الثلاث.
الملف يبدو متطابقًا والنص خطأ. استُبدل العنوان في البيانات الوصفية، أو أُعيدت
كتابة حقل المؤلف. لا شيء على الصفحة يتزحزح بكسلًا واحدًا، فيرى pixelcompare
مستندين متطابقين. أما compare فيبلّغ عن التغيير.
ولا واحد منهما يحتوي الآخر. وهذا هو بيت القصيد.
أربعة مواقف، وما تشغّله في كل منها
Section titled “أربعة مواقف، وما تشغّله في كل منها”عاد عقد من الإدارة القانونية. تحتاج أن تعرف ماذا تقول الصياغة الآن مقارنةً بما كانت تقوله. التنضيد سيكون قد أُعيد تدفّقه، وهذا لا يعنيك.
pdfl compare contract_v3.pdf contract_v4.pdf --ignore-dates \ --output html --output-file review.htmlوصلت إعادة طباعة من المورّد. يجب ألا يبدو أي شيء مختلفًا عن التجربة المعتمدة. وكون النص مطابقًا بايتًا ببايت ليس هو المسألة — المسألة ما يخرج على الورق.
pdfl pixelcompare approved.pdf reprint.pdf --viewer diff/المستند نفسه، مُصدَّرًا بأداة أخرى. غيّر المورّد برنامجه. الكلمات يجب أن تبقى سليمة، والمظهر مرشّح لأن ينزاح قليلًا. هنا يلزم الاثنان، وكل منهما يتحقق من وعد مختلف:
pdfl compare old_export.pdf new_export.pdf --normalizepdfl pixelcompare old_export.pdf new_export.pdf --max-diff 0.1 --viewer diff/ملصق أو نشرة خاضعة للتنظيم. نص التحذير يفرضه القانون، والتنضيد اعتمده شخص وقّع عليه. كلاهما مُلزِم، فيُفحص كلاهما — ومجلد العارض هو ما ترفقه بالاعتماد.
pdfl compare approved.pdf press_file.pdfpdfl pixelcompare approved.pdf press_file.pdf --viewer evidence/الاثنان معًا، بوابةً واحدة
Section titled “الاثنان معًا، بوابةً واحدة”كل أمر ينتهي برمز خروج، فيقرر النص البرمجي دون أن يقرأ شيئًا. يستعمل
pixelcompare الرمز 0 حين لا تتجاوز أي صفحة حد التسامح، و2 حين تتجاوزه
واحدة، و10 حين تتعذر قراءة ملف؛ ويتبع compare العُرف الذي تتبعه كل أوامر
التحقق — 0 نجاح، 1 تحذيرات، 2 أخطاء، 10 غير مقروء.
#!/bin/sh# وعدان وبوابة واحدة: الكلمات، والمظهر.set -e
pdfl compare approved.pdf candidate.pdf --output-file text-diff.json || { echo "تغيّرت الصياغة — انظر text-diff.json" exit 1}
pdfl pixelcompare approved.pdf candidate.pdf --max-diff 0.05 --viewer diff/ || { echo "المظهر غير مطابق — افتح diff/index.html" exit 1}
echo "الكلمات نفسها، والمظهر نفسه"أيّهما، في سطر واحد
Section titled “أيّهما، في سطر واحد”| السؤال الذي تطرحه | الأمر |
|---|---|
| هل تغيّرت الصياغة؟ | pdfl compare |
| هل تغيّرت البيانات الوصفية؟ | pdfl compare |
| هل أُدرجت صفحة أو حُذفت؟ | pdfl compare |
| هل تحرّك شيء أو اختفى أو تغيّر لونه؟ | pdfl pixelcompare |
| هل ما يزال يُطبع كما كان؟ | pdfl pixelcompare |
| هل هذا هو الملف المعتمد؟ | كلاهما |
إلى أين بعد ذلك
Section titled “إلى أين بعد ذلك”يوثّق فصل سطر الأوامر كل خيارات الاثنين، والوصفات العملية تضعهما داخل مسارات كاملة. وهنا أيضًا مقال عن المقارنة بكسلًا ببكسل وما يكلّفه الملف الخطأ بعد أن يصعد إلى الآلة.