Pdf.js: تم عرض Times New Roman PS بشكل سيئ

تم إنشاؤها على ٢٢ مارس ٢٠١٩  ·  3تعليقات  ·  مصدر: mozilla/pdf.js

أرفق (موصى به) أو رابط إلى ملف PDF هنا:
EMG8 -Cambridge Essentail Gold Maths 8-B 117.pdf

إعدادات:

  • متصفح الويب ونسخته: Chrome 73
  • نظام التشغيل ونسخته :
  • إصدار PDF.js :
  • امتداد المتصفح: لا

خطوات إعادة إظهار المشكلة:


  1. افتح ملف PDF (وهو عبارة عن صفحة واحدة مستخرجة من كتاب) وشاهد الخطوط التي تم عرضها بشكل سيئ

image

ما هو السلوك المتوقع؟ (إضافة لقطة شاشة)
على أي قارئ PDF آخر ، فإنه يجعله جيدًا:
image

ارتباط إلى عارض (إذا تمت استضافته على موقع بخلاف mozilla.github.io/pdf.js أو كملحق Firefox / Chrome):
عارض صفحات جيثب الحالي: https://mozilla.github.io/pdf.js/web/viewer.html

ملحوظات:
لقد نجحنا في جعله يعمل عن طريق تحرير الخطوط داخل ملف PDF. إنه حاليًا "Times New Roman PS" ، ويعيد عرضه باستخدام "Times New Roman" فقط على ما يبدو لإصلاحه.

لا توجد أخطاء في وحدة التحكم ، أو أي علامات أخرى مرئية للحلول مثل فقدان CMaps.

لسوء الحظ ، لا يُسمح لنا بتعديل ملفات PDF ، لذا فإن إعادة عرض كل ملف ليس حلاً قابلاً للتطبيق.

إذا كان بإمكان أي شخص إعطاء أي فكرة عن هذا والحل المحتمل ، فسيكون ذلك موضع تقدير كبير 🤠

4-font-conversion

التعليق الأكثر فائدة

يعرف ملف PDF نفس الخطوط عدة مرات. على سبيل المثال ، تم تعريف الخط LULQLP+TimesLTStd-Roman تسع مرات. يشير كل واحد إلى نفس FontDescriptor ونفس دفق بيانات CFF المضمّن.

يوجد حساب تجزئة الخط في PartialEvaluator.prototype.preEvaluateFont() في core / مقيم. يضيف إدخالات ترميز ، ToUnicode ، وعرض في التجزئة. تحصل بعض الخطوط في ملف PDF على أكواد تجزئة متطابقة لأن جميع الإدخالات المذكورة متطابقة ، بل وحتى العرض. تختلف إدخالات FirstChar و LastChar فقط. إذا حصلت الخطوط على أكواد تجزئة متطابقة ، فهل يمكن أن يتسبب ذلك في تخطي الخط بحيث لا يتم تحويله إلى OpenType؟

هذا ملف PDF مختزل يحتوي على خطين من ملف PDF الأصلي
issue10665_reduced.pdf

ال 3 كومينتر

يعرف ملف PDF نفس الخطوط عدة مرات. على سبيل المثال ، تم تعريف الخط LULQLP+TimesLTStd-Roman تسع مرات. يشير كل واحد إلى نفس FontDescriptor ونفس دفق بيانات CFF المضمّن.

يوجد حساب تجزئة الخط في PartialEvaluator.prototype.preEvaluateFont() في core / مقيم. يضيف إدخالات ترميز ، ToUnicode ، وعرض في التجزئة. تحصل بعض الخطوط في ملف PDF على أكواد تجزئة متطابقة لأن جميع الإدخالات المذكورة متطابقة ، بل وحتى العرض. تختلف إدخالات FirstChar و LastChar فقط. إذا حصلت الخطوط على أكواد تجزئة متطابقة ، فهل يمكن أن يتسبب ذلك في تخطي الخط بحيث لا يتم تحويله إلى OpenType؟

هذا ملف PDF مختزل يحتوي على خطين من ملف PDF الأصلي
issue10665_reduced.pdf

يوجد حساب تجزئة الخط في PartialEvaluator.prototype.preEvaluateFont() في core / مقيم. يضيف إدخالات ترميز ، ToUnicode ، وعرض في التجزئة. تحصل بعض الخطوط في ملف PDF على أكواد تجزئة متطابقة لأن جميع الإدخالات المذكورة متطابقة ، بل وحتى العرض. تختلف إدخالات FirstChar و LastChar فقط.

تحليل ممتاز حقًا ، شكرًا لك ؛ هذا جعل الخطأ سهل الإصلاح!

إذا حصلت الخطوط على أكواد تجزئة متطابقة ، فهل يمكن أن يتسبب ذلك في تخطي الخط بحيث لا يتم تحويله إلى OpenType؟

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

هذا رائع شكرا جزيلا للمساعدة!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات