Pdf.js: تم تقسيم مسار SVG بشكل غير صحيح إلى عقدتين

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

أرفق (موصى به) أو رابط إلى ملف PDF هنا:
test4.pdf

إعدادات:

  • متصفح الويب ونسخته: Chrome 56.0.2924.76
  • نظام التشغيل ونسخته: Linux Mint 18.3
  • إصدار PDF.js: الالتزام c0d6e46e392b327996eb0964b7932cb5bdde1727
  • امتداد المتصفح: لا

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

  1. قم بتشغيل "العقدة pdf2svg.js test4.pdf"
  2. قم بتحميل test4.1.svg الناتج في Chrome
  3. تحقق من سجل أخطاء وحدة التحكم. سترى هذا:
    chrome_console_error

ما هو السلوك المتوقع؟ (إضافة لقطة شاشة)
لا اخطاء.

ماذا حصل؟ (إضافة لقطة شاشة)
تم تقسيم مسار واحد في الإخراج إلى جزأين.
الأولي "M" في عقدة واحدة و "L" التالية في العقدة التالية.
يجب أن تكون هذه في نفس العقدة.
bad_svg_node

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

4-svg

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

لست معتادًا على طريقة عمل OperatorList ولكن يبدو أن قوائم المشغلين مقسمة إلى أجزاء تضم حوالي 1000 عامل.

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

هل هذا يبدو معقولاً؟

نعم ، ويجب أن يكون من السهل التحقق (فقط قم بزيادة القيمة كثيرًا ، وتعطيل هذا التقسيم بشكل فعال).

بدلاً من تعديل OperatorList وثابتها CHUNK_SIZE ، يجب إصلاح svg.js.

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

ربما على هذا النحو: يجب دمج عوامل التشغيل المتتالية OPS.constructPath في عقدة <svg:path> إذا لم يكن هناك عامل تشغيل متداخل لطلاء المسار ...

مرة أخرى ، هذا يبدو معقولا تماما.

ال 4 كومينتر

قد يكون هذا متعلقًا بالخطأ رقم 9167.

أعتقد أن الجاني موجود هنا:
https://github.com/mozilla/pdf.js/blob/a045a00af34b764edda5991d2bcd18541ed60536/src/core/operator_list.js#L533 -L534
لست معتادًا على طريقة عمل OperatorList ولكن يبدو أن قوائم المشغلين مقسمة إلى أجزاء تضم حوالي 1000 عامل. في بعض الأحيان يتم وضع حدود القطعة في منتصف تعريف مسار PDF. ينتج عن هذا عاملين OPS.constructPath ولا يبدأ العامل الأخير بـ moveTo .

هل هذا يبدو معقولاً؟

بدلاً من تعديل OperatorList وثابتها CHUNK_SIZE ، يجب إصلاح svg.js. ربما على هذا النحو: يجب دمج عوامل التشغيل المتتالية OPS.constructPath في عقدة <svg:path> إذا لم يكن هناك عامل تشغيل متداخل لطلاء المسار ...

لست معتادًا على طريقة عمل OperatorList ولكن يبدو أن قوائم المشغلين مقسمة إلى أجزاء تضم حوالي 1000 عامل.

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

هل هذا يبدو معقولاً؟

نعم ، ويجب أن يكون من السهل التحقق (فقط قم بزيادة القيمة كثيرًا ، وتعطيل هذا التقسيم بشكل فعال).

بدلاً من تعديل OperatorList وثابتها CHUNK_SIZE ، يجب إصلاح svg.js.

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

ربما على هذا النحو: يجب دمج عوامل التشغيل المتتالية OPS.constructPath في عقدة <svg:path> إذا لم يكن هناك عامل تشغيل متداخل لطلاء المسار ...

مرة أخرى ، هذا يبدو معقولا تماما.

يمكنني أن أؤكد أنه إذا قمت بزيادة CHUNK_SIZE إلى 10000000 ، فستختفي المشكلة.
(وأنا أوافق على أن هذا ليس حلاً مناسبًا)
شكرا لمساعدتك.

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