Pdf.js: خطأ عند تحميل ملف PDF يستخدم خطوط النظام

تم إنشاؤها على ٤ فبراير ٢٠١٤  ·  27تعليقات  ·  مصدر: mozilla/pdf.js

ملف الاختبار: https://dl.dropboxusercontent.com/u/16283445/PORTRAIT.pdf

تم إنتاج الملف بواسطة محول Muhimbi PDF.

يظهر النص الرئيسي (الذي يستخدم خط Tahoma المضمن) بشكل جيد ؛ إنها رسالة التجربة الموجودة أعلى الملف التي تسبب الخطأ. بعد بعض التصحيح ، وجدت أن هذه الرسالة تشير إلى خط نظام Helvetica ، وأن الحروف الرسومية الخاصة به مفقودة بطريقة ما في وقت الخطأ.

سجل الخطأ:

Error: Requesting object that isn't resolved yet Helvetica_path_T pdf.js:205
    at error (http://[skipped]/pdfjs/pdf.js:207:15)
    at Object.PDFObjects_get [as get] (http://[skipped]/pdfjs/pdf.js:4640:9)
    at Object.FontFace.getPathGenerator (http://[skipped]/pdfjs/pdf.js:7675:23)
    at Object.CanvasGraphics.paintChar (http://[skipped]/pdfjs/pdf.js:6105:26)
    at Object.CanvasGraphics_showText [as showText] (http://[skipped]/pdfjs/pdf.js:6291:18)
    at Object.CanvasGraphics_nextLineShowText [as nextLineShowText] (http://[skipped]/pdfjs/pdf.js:6381:12)
    at Object.CanvasGraphics_executeOperatorList [as executeOperatorList] (http://[skipped]/pdfjs/pdf.js:5600:22)
    at Object.InternalRenderTask__next [as _next] (http://[skipped]/pdfjs/pdf.js:4807:39)
    at Object.pdfViewcContinueCallback [as continueCallback] (http://[skipped]/pdfjs/viewer.js:4261:9)
3-pdf-broken 4-font-conversion

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

مع pdfjs-dist": "^2.2.2 set disableFontFace: false تم إصلاح هذه المشكلة عندي.

pdfjs.getDocument( { url: pdfUrl, disableFontFace: false, }

ال 27 كومينتر

فشل هذا لأنه لم يتم تحميل الخط عندما نحاول جلبه في font_loader.js # L313 .
يبدو أن المشكلة هي أنه لم يتم تحميله فعليًا على الإطلاق ، بالنظر إلى المُقيِّم.js # L284 ، نظرًا لأن font.data غير محدد في هذه الحالة. والسبب في ذلك هو أن الخط المعني لا يحتوي على ملف خط مضمن ، مما يعني أنه في fonts.js نعود قبل تحديد font.data . راجع fonts.js # L2256 و fonts.js # L2303 .
السبب في أن هذه ليست مشكلة أكبر من الناحية العملية بالنسبة لنا ، هو أنها تؤثر فقط على ملفات PDF (مثل هذه المشكلة) حيث يتم تضمين مورد الخط داخل ، على سبيل المثال ، قاموس XObject .

للأسف لا أعرف كيف يمكننا معالجة هذه المشكلة ، نظرًا لأن إنشاء font.data بدون ملف خط يبدو صعبًا في الكود الحالي. ربما يتم حل هذا "مجانًا" إذا قمنا بتضمين الخطوط القياسية في PDF.js؟

ملاحظة: لقد لاحظت أيضًا أن إصلاح هذه المشكلة سيعالج واحدًا (أو اثنين) من الملفات المدرجة في http://bthorben.github.io/pdfRepo/#crashed.

هل يمكن أن يكون هناك حل مثل أحد هذه:

1 - خيار للسماح باستخدام بعض الخطوط الافتراضية أو بعض الخطوط التي تم استخدامها بالفعل للملف بالضبط
2 - خيار للسماح بتخطي عرض هذا العنصر
يمكن أن يساعد هذا في متابعة العمل مع ملف pdf إذا كان هناك بعض الخطوط غير موجودة ، ويتم الإخراج كتحذير فقط ، وليس كخطأ كسر.

ما رأيك؟

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

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

هل هناك أي حل متاح؟ أو نوعًا من آلية اكتشاف الأخطاء التي اقترحها xwcg ؟

تم تقديم المخادع هنا: https://bugzilla.mozilla.org/show_bug.cgi؟id=1463728

أهلا بالجميع،
حصلت على نفس الخطأ.
هل لي أن أعرف ما إذا كان هناك أي حل مؤقت لهذه المشكلة قبل الإصلاح الرسمي؟

أي تحديث على هذا ؟، من عام 2014 وما زالت لم تحل

@ diego-lipinski-de-castro لمعلوماتك ، لقد أصلح هذا الدمج # 9809 هذا إذا مررت في ignoreErrors: صحيح في دالة getDocument. إذا كنت تستخدم npm pdfjs-dist ، فلن يتم تحديثه بعد. لقد بنيت للتو من المصدر وملفات PDF التي كانت تستخدم للشكوى من الخطوط تتم معالجتها الآن بشكل صحيح باستخدام إخراج قماش. يبدو كل شيء على ما يرام.

sirisian شكرا لتحديثك. نتطلع إلى الإفراج

sirisian هل تعلم متى سيكون التحديث لـ npm pdfjs-dist؟ وإذا كان هناك حل بديل لـ npm؟
شكرا

أي تحديثات على إصدار الإصلاح هذا لـ npm pdfjs-dist؟

مرحبًا ، لقد واجهت هذا الخطأ أيضًا. هل هناك طريقة لاستبدال الخط غير الموجود في النظام بخط افتراضي؟

مرحبًا timvandermeij متى من المحتمل أن نرى هذا الإصلاح في pdfjs-dist؟

مع pdfjs-dist": "^2.2.2 set disableFontFace: false تم إصلاح هذه المشكلة عندي.

pdfjs.getDocument( { url: pdfUrl, disableFontFace: false, }

في رأيي ، عندما يفشل pdf.js في تحميل نص بخط معين ، يجب أن يقوم بتحميل نفس النص باستخدام خط بديل يمكن أن يظهره (على سبيل المثال ، الخطوط الافتراضية التي حددها المستخدم في تفضيلات الخط) ، بدلاً من التوقف عن العرض الصفحة وإلقاء خطأ. كان هذا هو السلوك في Firefox 61 وما قبله عندما تم تعطيل الخيار "السماح للصفحات باختيار الخطوط الخاصة بها ، بدلاً من التحديدات أعلاه". في رأيي ، عرض النص بخط بديل أفضل من عدم إظهار أي شيء على الإطلاق.

مع pdfjs-dist": "^2.2.2 set disableFontFace: false تم إصلاح هذه المشكلة عندي.

pdfjs.getDocument( { url: pdfUrl, disableFontFace: false, }

أدى هذا إلى حل مشكلتي ، فأنا أستخدم pdfjs-dist ^ 2.0.943
شكرا لك

أنا أعمل في مشروع يكون فيه IE 11 متطلبًا ولا تسمح إعدادات الأمان (التي يديرها فريق تكنولوجيا المعلومات) بتنزيل الخطوط المخصصة. ينتج عن هذا عرض ملف PDF يكون هذا فارغًا في الغالب عند التجسيد ، ويعرض فقط بعض العناوين والأحرف المائلة.

يؤدي تعيين disableFontFace: true إلى عكس في IE 11 (وجميع المتصفحات الأخرى في الواقع). يتم عرض معظم الخطوط بعد ذلك ، ولكنها تقدم أخطاءً متنوعة تبدو كالتالي:

Warning: getPathGenerator - ignoring character: "Error: Requesting object that isn't resolved yet Times_path_i.".

تشير جميع الأخطاء إلى أحرف مختلفة في الجزء Times_path_* من الرسالة. يقوم المستند بتحميل معظم المحتوى ولكن العناوين الرئيسية والأحرف المائلة والأشكال الأخرى مفقودة بصريًا (على الرغم من أنه يمكن تحديد النص الفارغ بسبب طبقة النص الشفافة في الأعلى)

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

أي اقتراحات؟

اي اخبار عن ذلك؟

أهلا بالفريق،
لقد جربت كل الأشياء الممكنة ، لا شيء يمكن أن يحل الخطأ.
هل لديك أي تحديثات؟

هذا تأثير كبير بالنسبة لنا. لماذا الحل لتعيين DisableFontFace = false؟ ما أفهمه هو أنه مع disableFontFace = true ، لا يهم ما هي الخطوط المضمنة الموجودة (أو التي لا توجد) في ملف pdf. هل هذا غير صحيح؟

اي اخبار عن ذلك؟

منذ 6 سنوات ، كانت AllSeeingEye تواجه مشكلة واليوم هذه المكتبة بها 594 مشكلة لم يتم حلها. لا أحد يعطي f * عن هذا الخطأ أم ماذا؟ سيحتاج الخطأ الذي هو بالنسبة لي إلى البحث عن libs أخرى مثل pdf-lib.

يوم جيد للجميع!

واجهت بعض المشكلات المماثلة أثناء محاولة حل مشكلة عرض طبقة النص باستخدام معلمات disableFontFace .

تبدو بعض المستندات في disableFontFace: false كما يلي:
image

أثناء عرض المستند السابق جيدًا على disableFontFace: true ، توجد مشكلة في مستند مختلف:
image

كل هذه الخلايا لم تكن فارغة.
يتم عرض بعض المستندات بشكل جيد بطريقة ما ، والبعض الآخر بطريقة أخرى.
كيف يجب أن أتصرف؟

أواجه مشكلة مماثلة مثل @ Hatgor
هل هناك إصلاح أو بعض الأمور التي يمكن القيام بها من أجل تصحيح هذا؟ الحلول المذكورة أعلاه لا تعمل. : |

أواجه نفس المشكلة بالضبط. محاولة تشغيله في lambda على Node12 ، والذي يعمل على amazonlinux2 - مما يعني عدم وجود خطوط مثبتة بشكل افتراضي. سيكون من الرائع حقًا إذا تمكنا من تضمين 14 خطًا قياسيًا في ملفات pdfjs افتراضيًا ، أو كشف واجهة برمجة تطبيقات لتحميلها بدلاً من الاعتماد عليها في النظام الأساسي. حتى الآن كانت جهودي لتثبيت الخطوط على النظام ... أقل من نجاح.

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

بعد الترقيع لساعات حرفية مع amazonlinux2 لتثبيت الخطوط ، يمكنني الحصول على الخطوط غير المضمّنة ليتم عرضها عن طريق تعيين "disableFontFace" على "خطأ" بشكل صريح ، ولكن بعد ذلك تفشل الخطوط المضمنة من ملف PDF بنفس الرمز الذي يظهر في تعليق Hatgor .

حسنًا ، حتى الآن لا توجد أحجار نرد في ملفات PDF التي تمت معالجتها مسبقًا لتضمين الخطوط. هل هناك ، ربما ، طريقة لإدخال خط غير مضمن في ملف PDF؟ يمكنني استضافة .ttf (s) الضرورية في مكان آخر ، لكنني لا أرى أي شيء في واجهة برمجة التطبيقات لتحميل خط عشوائي.

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