Pdf.js: تذكر موقف العرض بعد تحديث الصفحة

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

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

يأتي الدافع وراء هذا التغيير من تجربة سير العمل المعطل التالي:

  1. قم بإنشاء ملف PDF محلي ( file://....pdf ).
  2. افتح PDF باستخدام PDF.js وانتقل إلى بعض الفصول في ملف PDF.
  3. تحرير ملف PDF.
  4. قم بتحديث عارض PDF.js (على سبيل المثال باستخدام F5).
  5. النتيجة المتوقعة: احتفظ بموضع التمرير.
    النتيجة الفعلية: يتم عرض الصفحة 1 في منفذ العرض.

الملاحظات الفنية:

  • performance.navigation.type لاكتشاف إعادة تحميل الصفحة مقابل التنقلات.
  • يتم الاحتفاظ بـ history.state عند إعادة تحميل الصفحة.
1-viewer

ال 34 كومينتر

سيكون هذا رائعا.

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

لم يشر أحد إلى أنهم يعملون عليه ، لذا فالأمر كله لك! لا تتردد في الاتصال بنا على IRC أو ترك رسالة هنا في حال كان لديك أسئلة.

مرحبا شكرا جزيلا على الرد السريع. أريد حقًا المساهمة في مشروع مفتوح المصدر. سأبدأ العمل عليه على الفور. منذ هذه المرة الأولى التي أفعل فيها شيئًا كهذا ، هل هناك أي شيء يجب أن أعرفه؟
شكرا جزيلا!

أعتقد أن جميع المعلومات الضرورية لهذا التصحيح مدرجة على https://github.com/mozilla/pdf.js/wiki/Contributing. ما لم تكن تلمس الملفات الموجودة في المجلد src/ (وهو ما لا أتوقعه ؛ أتوقع أنك ستحتاج فقط إلى لمس الملفات الموجودة في المجلد web/ ) ، ما عليك سوى تشغيل gulp lint و gulp unittest للتحقق من تغييراتك. يمكنك تشغيل gulp server لبدء خادم محلي لاختبار تغييراتك في المتصفح. إذا كان لديك المزيد من الأسئلة ، تحقق من الويكي ، اتصل بنا على IRC أو اسأل هنا. حظا طيبا وفقك الله!

شكرًا ، سأبدأ في قراءة الملفات.

أنا أبحث في هذا ولكن لا أعرف ما إذا كنت أفهم المشكلة جيدًا.

1 - إنشاء ملف PDF محلي (ملف: //....pdf).
3 - تحرير ملف PDF.

إذن ، فإن المشكلة تتعلق فقط ببناء / إنشاء ملف PDF الخاص بي؟ على سبيل المثال ، بناءه باستخدام بعض مولدات pdf مثل اللاتكس / jspdf؟

فعلت ما يلي ولم أتمكن من التكاثر:

  1. أنشأت بنفسي ملف PDF وفتحه بـ http://localhost:8888/web/viewer.html?file=/andrei_test/a4.pdf
  2. انتقل إلى الصفحة 3.
  3. ثم حرر ملف pdf (أضيف المزيد من النص في الصفحة 3)
  4. تم التحديث وشاهدت ظهور المحتوى الجديد على الصفحة 3 ولكنني كنت لا أزال في الصفحة 3 ، لم ينقلني pdf.js إلى الصفحة 1.

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

لذلك لست متأكدًا حقًا مما سأتبعه هنا. هل يمكنك إعطاء مزيد من التفاصيل حول كيفية التكاثر؟ شكر!

لا يمكنني الاختبار مرة أخرى في الوقت الحالي ولكن في الخطوة 4 اعتدت الحصول على ذلك
انتقل إلى الصفحة 1 بعد التحديث (إذا تم تغيير المستند). قال ذلك لم أكن
العمل محليًا ولكن عبر اتصال بالخادم. لست متأكدًا مما إذا كان ذلك يمكن أن يجعل ملف
فرق.

يوم الأحد 31 ديسمبر 2017 الساعة 4:42 صباحًا ، Andrei Petre [email protected]
كتب:

أنا أبحث في هذا ولكن لا أعرف ما إذا كنت أفهم المشكلة تمامًا
حسنا.

1 - إنشاء ملف PDF محلي (ملف: //....pdf).
3 - تحرير ملف PDF.

إذن ، فإن المشكلة تتعلق فقط ببناء / إنشاء ملف PDF الخاص بي؟ على سبيل المثال
بنائه باستخدام بعض منشئ pdf مثل latex / jspdf؟

فعلت ما يلي ولم أتمكن من التكاثر:

  1. أنشأت بنفسي ملف PDF وفتحه باستخدام http: // localhost : 8888 / web /
    viewer.html؟ file = / andrei_test / a4.pdf
    http: // localhost: 8888 / web / viewer.html؟ file = / andrei_test / a4.pdf
  2. انتقل إلى الصفحة 3.
  3. ثم حرر ملف pdf (أضيف المزيد من النص في الصفحة 3)
  4. تم التحديث ورأيت المحتوى الجديد على الصفحة 3 يظهر ولكني كنت لا أزال
    في الصفحة 3 ، لم ينقلني pdf.js إلى الصفحة 1.

قبل ذلك ، حاولت فقط تحديث ملف PDF الافتراضي من viewer.html a
عدة مرات وكان لدي انطباع بأن الصفحة لم يتم تذكرها
الكل. لكن الآن أعتقد أنني أفهم ، إذا قمت بتحديثه بسرعة كبيرة (قبل
تجزئة داخلية لتذكر مكان التمرير للخلف بعد التحديث) ،
عندها ستوصلني إلى آخر مرة كنت فيها قبل التمرير الأخير ، لا
إلى موقعي الأخير. ولكن إذا ضيعت نصف ثانية أخرى ثم قمت بالتحديث ،
ثم أرى أنه على ما يرام ، أحصل على موضع التمرير إلى حيث مررت آخر مرة.

لذلك لست متأكدًا حقًا مما سأتبعه هنا. هل يمكن أن تعطي المزيد من التفاصيل
حول كيفية التكاثر؟ شكر!

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/mozilla/pdf.js/issues/6847#issuecomment-354573873 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AGBkZqzS34MYDM8wZi41cNY0NiVUyoI-ks5tFsNqgaJpZM4HBeqE
.

لقد أعدت الاختبار للتو وتم نقلي بالتأكيد إلى الصفحة الأولى عند إعادة التحميل. هذه
مع متصفح Chrome إذا كان ذلك يحدث فرقًا. وما زلت تعمل
عن بعد مع خادم HTTP.
بالمناسبة ، يستخدم Sharelatex و rstudio وغيرهم خلفيات pdf.js و
تم حل هذه المشكلة بالفعل على ما يبدو. لا يمكن أن نطلب منهم فقط
تساهم رقعة؟

يوم الأحد 31 ديسمبر 2017 الساعة 7:18 صباحًا ، ياشا سافيلييف [email protected]
كتب:

لا يمكنني الاختبار مرة أخرى في الوقت الحالي ولكن في الخطوة 4 اعتدت الحصول على ذلك
انتقل إلى الصفحة 1 بعد التحديث (إذا تم تغيير المستند). قال ذلك لم أكن
العمل محليًا ولكن عبر اتصال بالخادم. لست متأكدًا مما إذا كان ذلك يمكن أن يجعل ملف
فرق.

يوم الأحد 31 ديسمبر 2017 الساعة 4:42 صباحًا ، Andrei Petre [email protected]
كتب:

أنا أبحث في هذا ولكن لا أعرف ما إذا كنت أفهم المشكلة تمامًا
حسنا.

1 - إنشاء ملف PDF محلي (ملف: //....pdf).
3 - تحرير ملف PDF.

إذن ، فإن المشكلة تتعلق فقط ببناء / إنشاء ملف PDF الخاص بي؟ على سبيل المثال
بنائه باستخدام بعض منشئ pdf مثل latex / jspdf؟

فعلت ما يلي ولم أتمكن من التكاثر:

  1. أنشأت لنفسي ملف PDF وفتحه باستخدام
    http: // localhost : 8888 / web / viewer.html؟ file = / andrei_test / a4.pdf
    http: // localhost: 8888 / web / viewer.html؟ file = / andrei_test / a4.pdf
  2. انتقل إلى الصفحة 3.
  3. ثم حرر ملف pdf (أضيف المزيد من النص في الصفحة 3)
  4. تم التحديث ورأيت المحتوى الجديد على الصفحة 3 يظهر ولكني كنت لا أزال
    في الصفحة 3 ، لم ينقلني pdf.js إلى الصفحة 1.

قبل ذلك ، حاولت فقط تحديث ملف PDF الافتراضي من viewer.html a
عدة مرات وكان لدي انطباع بأن الصفحة لم يتم تذكرها
الكل. لكن الآن أعتقد أنني أفهم ، إذا قمت بتحديثه بسرعة كبيرة (قبل
تجزئة داخلية لتذكر مكان التمرير للخلف بعد التحديث) ،
عندها ستوصلني إلى آخر مرة كنت فيها قبل التمرير الأخير ، لا
إلى موقعي الأخير. ولكن إذا ضيعت نصف ثانية أخرى ثم قمت بالتحديث ،
ثم أرى أنه على ما يرام ، أحصل على موضع التمرير إلى حيث مررت آخر مرة.

لذلك لست متأكدًا حقًا مما سأتبعه هنا. هل يمكن أن تعطي المزيد من التفاصيل
حول كيفية التكاثر؟ شكر!

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/mozilla/pdf.js/issues/6847#issuecomment-354573873 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AGBkZqzS34MYDM8wZi41cNY0NiVUyoI-ks5tFsNqgaJpZM4HBeqE
.

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

timvandermeij هل هذا

لا أستطيع معرفة ذلك

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

BrianNgo هل عملت على المستوى المحلي ، باستخدام الكود ، أو كيف اختبرت ذلك؟ هل يمكنك إعطاء بعض معلومات إعادة الإنتاج خطوة بخطوة

yashamon: وما زلت أعمل عن بعد مع خادم http

yashamon هل يمكن أن تشرح المزيد عن الإعداد الخاص بك؟ قد يعتمد على ذلك ، لأنه عندما حاولت تشغيل خادم محلي والوصول إليه على المضيف المحلي (على سبيل المثال http://localhost:8888/web/viewer.html?file=/andrei_test/a4.pdf ) ، لم أتمكن من إعادة إنتاج هذا. كنت أستخدم الكروم أيضًا.

Jolo510: timvandermeij هل هذا

@ Jolo510 الأمر متروك

المشكلة هنا هي أن الملف تغير بشكل طفيف فقط ، لكن التجزئة تغيرت بالكامل. لغرض الاختبار ، لا يهم محتوى PDF الفعلي ، ما عليك سوى التأكد من أن ملفات PDF التي تختبرها تحتوي على تجزئات مختلفة.

لإعادة الإنتاج بشكل أكثر موثوقية ، يمكنك أخذ مجموعة من ملفات PDF غير المرتبطة تمامًا (على سبيل المثال ، ملفات PDF في test/pdfs/ ) ، والكتابة فوق ملف PDF قبل إعادة تحميل PDF.js (مع ضبط العرض على الصفحة 2 ، بحيث سترى الفرق بين الصفحة 1 والصفحة 2). بهذه الطريقة ، سيشير مسار الملف نفسه إلى ملف مختلف ويمكنك رؤية الخطأ أثناء العمل.

andreip نعم ، http: // localhost : 8888 / web / viewer.html؟ file = / andrei_test / a4.pdf. ثم استخدمت libreoffice لتعديل الملف وتصديره. تحديث الصفحة وحدث الخطأ.

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

ستكون المشكلة الحقيقية عند تحديث الملف بسرعة كبيرة قبل إجراء التجزئة الداخلية.

تضمين التغريدة سأرى ما إذا كنت أعده محليًا.

أخطط لتشغيل التطبيق محليًا الليلة. ثم خصص بعض الوقت في اليوم أو اليومين التاليين لإعادة إنتاج الخطأ والحفر في الكود.

BrianNgo إذا كانت المشكلة هي تحديث الملف بسرعة كبيرة ، فما الحل المحتمل؟

أي تقدم في هذا؟

في الأربعاء ، 17 كانون الثاني (يناير) 2018 ، الساعة 23:07 ، كتب جوني لو ، [email protected] :

أخطط لتشغيل التطبيق محليًا الليلة. ثم خصص بعض الوقت في
في اليوم أو اليومين التاليين لإعادة إنتاج الخطأ والحفر في الكود.

BrianNgo https://github.com/brianngo إذا تم تحديث المشكلة أيضًا
بسرعة ، ما الحل المحتمل؟

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/mozilla/pdf.js/issues/6847#issuecomment-358539017 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AGBkZmlmOIxzNatXTXTGW3bNaeNFkWFzks5tLtF2gaJpZM4HBeqE
.

yashamon كلا ، لم أحرز أي تقدم في هذا الشأن.

@ روب - دبليو
مهلا ،
أرى الكثير من الناس يحاولون ذلك. إعطائها محاولة. يرجى إعلامي إذا كنا بحاجة إلى كتابة اختبار لهذا أيضًا

@ ankitverma2211 إذا كان ذلك ممكنًا ، فستكون الاختبارات رائعة.
ومع ذلك ، ليس لدينا اختبارات آلية لهذا النوع من الميزات ، لذلك إذا بدا التصحيح معقولًا واجتاز اختبارًا يدويًا ، فسنقبله أيضًا.

أود أن أبدأ في هذا. هل يعمل أي شخص آخر حاليًا على هذا؟

ليس هذا ما أعلمه عن. لا تتردد في العمل على هذا!

من المؤكد أنني بدأت في هذا الأمر ، وسوف أرسل لكم رفاق على IRC للحصول على أي مساعدة

يوم الإثنين 24 ديسمبر 2018 الساعة 4:24 مساءً Tim van der Meij [email protected]
كتب:

ليس هذا ما أعلمه عن. لا تتردد في العمل على هذا!

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/mozilla/pdf.js/issues/6847#issuecomment-449718751 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AF8SZdbnLGoX5cY1fvk02tcM_3o8KDctks5u8LJUgaJpZM4HBeqE
.

timvandermeij لقد
يستخدم التخزين المحلي لتخزين محفوظات عرض pdfjs مع الملفات كمصفوفة. حيث يخزن كل عنصر بصمة الملف والبيانات الوصفية الأخرى حول محفوظات العرض الأخيرة. عندما نقوم بتعديل بصمة ملف لتغييرات الملف وللبصمة الجديدة هذه ، ليس لدينا أي سجل عرض.

بصمة ملفي القديم => 14ecd8cdbbf6f76f04030d59025b5937

البصمة بعد تغيير الملف => 619c4c4f872e96e6514b25c6a1ae03f2

بقدر ما مررت بحساب بصمات الأصابع للمستند ، فإنه يعتمد على المحتوى ومقطورة pdf.

هنا بعض المراجع

حساب البصمة

إحالة تدفق التكديس

اسمحوا لي أن أعرف ما تقوله عن هذا. هل يجب إغلاق هذه القضية؟

مرحبا راهول ،

قد يساعدك إذا قمت بفحص Sharelatex أثناء العمل ، والذي يستخدم pdf.js كملف
الخلفية ولديها بالفعل عمل حولها ، حيث يتم عرض ملفات PDF بعد مصدر لاتكس
تغيير الكود ، والذي سيغير بالتأكيد أي تجزئة ، مع الحفاظ على العرض
موضع. أعتقد أن امتداداتهم مفتوحة المصدر على جيثب ، لكن لا تفعل ذلك
لديك ارتباط جاهز.

يوم الجمعة 28 ديسمبر 2018 الساعة 3:01 مساءً Rahul Sharma [email protected]
كتب:

timvandermeij https://github.com/timvandermeij لقد ذهبت من خلال
الكود الكامل المتضمن أثناء عرض ملف pdf.
يستخدم التخزين المحلي لتخزين ملفات pdfjs المحفوظة مع الملفات كملف
مجموعة مصفوفة. حيث يقوم كل عنصر بتخزين بصمة الملف وغيرها
البيانات الوصفية حول تاريخ العرض الأخير. عندما نقوم بتعديل ملف بصمة
يتغير الملف وبصمة الإصبع الجديدة هذه ليس لدينا أي عرض
التاريخ.

بصمة ملفي القديم => 14ecd8cdbbf6f76f04030d59025b5937

البصمة بعد تغيير الملف => 619c4c4f872e96e6514b25c6a1ae03f2

بقدر ما مررت بحساب بصمة الإصبع للمستند ، فهذا يعتمد
على المحتوى ومقطورة pdf.

هنا بعض المراجع

حساب البصمة
https://github.com/mozilla/pdf.js/blob/58c3ea08202becf007c304512c44726719acb508/src/core/core.js#L513

إحالة تدفق التكديس
https://stackoverflow.com/questions/33309378/using-fingerprint-generated-by-pdfjs-as-unique-id-for-a-pdf

اسمحوا لي أن أعرف ما تقوله عن هذا. هل يجب إغلاق هذه القضية؟

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/mozilla/pdf.js/issues/6847#issuecomment-450426605 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AGBkZidcCqtZjNp18mXaFfC78IfPRj-1ks5u9oaTgaJpZM4HBeqE
.

سيكون من المفيد جدًا مشاركة رابط الريبو المسؤول عن ذلك ، وبعد ذلك سيكون ميزة لهذا الريبو وليس خطأ

اعتدت أن يكون لدي برنامج نصي greasemonkey يستبدل المفتاح "Cr" بنقرة "viewBookmark" ، والتي تحل هذه المشكلة بشكل أساسي بالنسبة لي. لم يعمل بعد بعض إصدارات Firefox. يبدو أن greasemonkey لم يتم تحميله في pdf.js. هل المقصود؟

تعديل: بعد قليل من البحث أعتقد أن هذا مقصود - https://discourse.mozilla.org/t/extensions-on-pdfjs-pages/28441

تضمين التغريدة

لقد ألقيت نظرة على Sharelatex repo. إنهم يفعلون ذلك باستخدام تتبع pdfjs.history مع projectId بدلاً من بصمة الإصبع التي تتغير مع تغيير المستند ، لكن projectId لهذا المستند المعين يظل كما هو لـ sharelatex

لدي القليل من الأسئلة في الاعتبار. حاولت التواصل معكم في IRC لكن لم أحصل على رد

أسئلة:

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

ثابت في # 10424.

فقط اختبرت هذا ، لا يزال نفس السلوك. يؤدي تحديث الصفحة إلى إصلاح موضع عرض الصفحة فقط إذا لم يتغير ملف pdf ، وإلا فإن العرض ينتقل إلى الصفحة الأولى. هذا من السهل جدًا اختباره باستخدام اللاتكس ، اختر تجميعًا للمستند ومعاينة ملف pdf ، أضف كلمة عشوائية في مصدر اللاتكس ، وأعد ترجمة ومعاينة ملف pdf ، وانتقال معاينة pdfjs إلى الصفحة الأولى. أنا في الإصدار 2.2.191 في الكروم. سوف تحقق في Firefox عندما تسنح لي الفرصة.

لقد اختبرت مع Firefox ، يبدو أنه في الإصدار الأخير تم إصلاح المشكلة ، فهل يتخلف إصدار Chrome فقط؟

يتضمن إصدار امتداد Chrome هذا التصحيح. قد يختلف سلوكه بسبب الاختلاف في سلوك المتصفح. لقد نشرت مرة وصفًا تفصيليًا للمشكلة على https://github.com/mozilla/pdf.js/commit/cdea75dc397f4eb4d6fd1f7d8a388c7d11df3452 (والذي كان جزءًا من https://github.com/mozilla/pdf.js/pull/6200) .

لقد قدمت إصدارًا مشابهًا رقم 11359 فيما يتعلق بـ * ملف pdf المولد لاتكس. ليس من الصحيح في الواقع أن هذا يستخدم "تجزئة بناءً على محتويات الملف" @ Rob - W. بدلاً من ذلك ، هو معرف مضمن في ملف PDF عند الإنشاء ، وتعتمد كيفية إنشاء هذا المعرف على التطبيق الذي تم إنشاؤه ، بالنسبة لـ * لاتكس ، فهو عبارة عن تجزئة استنادًا إلى مجموعة الوقت الحالي واسم مسار ملف tex. انظر تعليقي الأخير هناك للحصول على حل.

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

القضايا ذات الصلة

THausherr picture THausherr  ·  3تعليقات

zerr0s picture zerr0s  ·  3تعليقات

AlexP3 picture AlexP3  ·  3تعليقات

smit-modi picture smit-modi  ·  3تعليقات

PeterNerlich picture PeterNerlich  ·  3تعليقات