Pdf.js: لا يمكن لـ viewer.js إجراء دفق PDF عبر الإنترنت

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

لا يمكن لـ viewer.js إجراء دفق PDF عبر الإنترنت.

بشكل افتراضي ، يحتوي viewer.js على:

var kDefaultURL = 'compressed.tracemonkey-pldi-09.pdf' ؛

استخدم الآن دفق PDF:
http://www.liferay.com/documents/31578/11925632/sample.pdf

كما

var kDefaultURL = ' http://www.liferay.com/documents/31578/11925632/sample.pdf ' ؛

في FireFox 9.0.1 و Chrome 16.0.912.63 ، يُلقي بأخطاء:

"
PDF.JS بناء: 9161c2e
الرسالة: استجابة خادم غير متوقعة بقيمة 0.
".

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

hashbyte سوف تحتاج إلى وكيل للخادم. الوكيل البسيط للغاية (الذي طورته) هو CORS Anywhere. ببساطة قم بإرفاق عنوان URL الخاص بالوكيل قبل عنوان URL إلى ملف PDF ، على سبيل المثال

"https://cors-anywhere.herokuapp.com/" + 
"http://bhpr.hrsa.gov/healthworkforce/rnsurveys/rnsurveyfinal.pdf" =
"https://cors-anywhere.herokuapp.com/http://bhpr.hrsa.gov/healthworkforce/rnsurveys/rnsurveyfinal.pdf"

ثم قم بترميز عنوان URL هذا ووضعه في المعلمة file ، وستحصل على رابط يمكنه فتح أي صفحة: https://mozilla.github.io/pdf.js/web/viewer.html ؟ file = https٪ 3A٪ 2F٪ 2Fcors-anywhere.herokuapp.com٪ 2Fhttp٪ 3A٪ 2F٪ 2Fbhpr.hrsa.gov٪ 2Fhealthworkforce٪ 2Frnsurveys٪ 2Frnsurveyfinal.pdf

ملاحظة: إذا كان عنوان URL الخاص بملف PDF لا يحتوي على أي علامات النسبة المئوية أو أحرف & ، فإن الطريقة الأسهل للحصول على رابط سريع هي فقط إرفاق عنوان URL الخاص بالمشاهد قبل الارتباط (لذلك ، بدون تشفير عنوان URL أولاً ). لا تفعل ذلك إلا إذا قمت بكتابة عنوان URL يدويًا (على سبيل المثال عند إجراء اختبار سريع):
https://mozilla.github.io/pdf.js/web/viewer.html؟file=https : //cors-anywhere.herokuapp.com/ http://bhpr.hrsa.gov/healthworkforce/rnsurveys/rnsurveyfinal. بي دي إف

ملاحظة: يتم توفير العرض التوضيحي لـ CORS Anywhere فقط لتوضيح الميزة. إذا كنت ستستخدم هذه الميزة على موقع به العديد من الزوار ، فيرجى استضافة مثيل CORS Anywhere بنفسك ، لتجنب وضع حمل غير عادل على الخادم التجريبي العام. إذا لاحظت أن أداء CORS Anywhere يزحف بسبب إساءة الاستخدام ، فسيتم وضع أصلك في القائمة السوداء. عند استضافة CORS Anywhere بنفسك ، يمكنك تقييد الوصول إلى موقعك فقط عبر معلمة التكوين originWhitelist لتجنب هذا النوع من الإساءة.

ال 29 كومينتر

القضايا ذات الصلة هي # 522 و # 586 و # 842

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

مرحبا بريند ،

ما السبب الرئيسي الذي يجعل "المستخدم سيضطر إلى الإصلاح بنفسه باستخدام وكيل أو CORS"؟

من المهم أن يكون ملف PDF قادمًا من خادم محلي (تحميل) أو خادم كملف أو خادم كتدفق مثل "http: //".

كعنوان URL للصورة ، يجب أن يدعم قارئ PDF عنوان HTTP URL.

شكرا

تسمح لك corsjonasyuandotcom بالحصول على ملف pdf باستخدام http من نفس الخادم. لكن المتصفح يحمي المستخدم من الحصول على / إرسال البيانات إلى خوادم أجنبية. يجب أن تستخدم هذه الخوادم رؤوس http لتجاوز هذا التقييد.

نظرًا لأن الخادم الوكيل من جانب الخادم الخاص بك سيكون موجودًا على نفس الخادم حيث ستكون برامج العارض على ما يرام مع ذلك.

notmasteryet شكرا. يعمل عند استخدام نفس الخادم مثل

var kDefaultURL = '/pdf-reader-web/sample.pdf' ؛

مرحبًا جوناس ،

لن ننفذ هذا من جانبنا لأنه لا يمكننا تنفيذه بسبب قيود أمان المتصفح. راجع http://en.wikipedia.org/wiki/XMLHttpRequest#Cross -domain_requests

بريندان

مرحبًا brendandahl

كنت أتساءل ما إذا كان هناك أي تحديث منذ 2011؟ هل ما زال من المستحيل إصلاح مشكلات CORS؟

نعم. راجع https://github.com/mozilla/pdf.js/wiki/Frequently-Asked-Questions#faq -xhr لمزيد من المعلومات.

شكرا لك تيم!

مرحباtimvandermeij. شكرا لأستجابتك. لقد جربت العديد من الحلول ولكن ما زلت غير قادر على السماح لـ CORS على خادم الويب الخاص بي. هل لديك أي مثال git؟

Dassine هنا تذهب http://mozilla.github.io/pdf.js/web/viewer.html؟file=//async5.org/moz/pdfjs.pdf - يتم تحميل عارض PDF http://async5.org /moz/pdfjs.pdf . لاحظ أن async5.org يسمح لـ mozilla.github.io بالحصول على الملفات. خلاف ذلك ، يجب على مستعرض الويب حظر الوصول إلى ملف بعيد لأسباب أمنية. إنها ممارسة قياسية على الويب ولا يوجد أي شيء يمكن أن يفعله PDF.js للتحايل على أمان المتصفحات.

إذا قمت بتضمين عنصر تحكم المستعرض في تطبيق سطح المكتب / الهاتف المحمول ، فيمكنك طلب بيانات ثنائية باستخدام واجهات برمجة تطبيقات نظام التشغيل / إطار العمل وتمريرها إلى ملف PDF.js كـ Uint8Array.

شكرا yurydelendik على الروابط الخاصة بك. أعلم أن PDF.js لا يدير CORS. لقد جربت الحلول التي أرسلتها timvandermeij وآخرين لكنها فشلت. أنا أبحث عن حلول التنفيذ / التعديلات الصحيحة بمجرد تنزيل ملف pdf.js repo. شكرا

yurydelendik لدي أيضًا مشكلة في تحميل ملف PDF بعيد. لكن هذا الخطأ يحدث فقط في Chrome.
PDF.js v1.0.1040 (الإصدار: 997096f)
الرسالة: استجابة خادم غير متوقعة (0) أثناء استرداد ملف PDF " http://bhpr.hrsa.gov/healthworkforce/rnsurveys/rnsurveyfinal.pdf ".

يمكنك أن ترى أن ملف PDF الذي أحاول تحميله موجود على خادم آخر لا أملك أي تحكم فيه. ولكن ما زلت أرغب في إظهار ملف PDF هذا على viewer.js الخاص بي

ليس لدي خبرة كبيرة مع CORS لكنني أنشأت ملف crossdomain.xml الأقل أمانًا على خادمي ولكن حتى ذلك الحين لا يعمل.

hashbyte سوف تحتاج إلى وكيل للخادم. الوكيل البسيط للغاية (الذي طورته) هو CORS Anywhere. ببساطة قم بإرفاق عنوان URL الخاص بالوكيل قبل عنوان URL إلى ملف PDF ، على سبيل المثال

"https://cors-anywhere.herokuapp.com/" + 
"http://bhpr.hrsa.gov/healthworkforce/rnsurveys/rnsurveyfinal.pdf" =
"https://cors-anywhere.herokuapp.com/http://bhpr.hrsa.gov/healthworkforce/rnsurveys/rnsurveyfinal.pdf"

ثم قم بترميز عنوان URL هذا ووضعه في المعلمة file ، وستحصل على رابط يمكنه فتح أي صفحة: https://mozilla.github.io/pdf.js/web/viewer.html ؟ file = https٪ 3A٪ 2F٪ 2Fcors-anywhere.herokuapp.com٪ 2Fhttp٪ 3A٪ 2F٪ 2Fbhpr.hrsa.gov٪ 2Fhealthworkforce٪ 2Frnsurveys٪ 2Frnsurveyfinal.pdf

ملاحظة: إذا كان عنوان URL الخاص بملف PDF لا يحتوي على أي علامات النسبة المئوية أو أحرف & ، فإن الطريقة الأسهل للحصول على رابط سريع هي فقط إرفاق عنوان URL الخاص بالمشاهد قبل الارتباط (لذلك ، بدون تشفير عنوان URL أولاً ). لا تفعل ذلك إلا إذا قمت بكتابة عنوان URL يدويًا (على سبيل المثال عند إجراء اختبار سريع):
https://mozilla.github.io/pdf.js/web/viewer.html؟file=https : //cors-anywhere.herokuapp.com/ http://bhpr.hrsa.gov/healthworkforce/rnsurveys/rnsurveyfinal. بي دي إف

ملاحظة: يتم توفير العرض التوضيحي لـ CORS Anywhere فقط لتوضيح الميزة. إذا كنت ستستخدم هذه الميزة على موقع به العديد من الزوار ، فيرجى استضافة مثيل CORS Anywhere بنفسك ، لتجنب وضع حمل غير عادل على الخادم التجريبي العام. إذا لاحظت أن أداء CORS Anywhere يزحف بسبب إساءة الاستخدام ، فسيتم وضع أصلك في القائمة السوداء. عند استضافة CORS Anywhere بنفسك ، يمكنك تقييد الوصول إلى موقعك فقط عبر معلمة التكوين originWhitelist لتجنب هذا النوع من الإساءة.

مرحبا،
لدي هذا الخطأ عندما أريد تحميل pdf من عنوان url خارجي

خطأ: أصل الملف لا يتطابق مع المشاهد
طرح خطأ جديد ("أصل الملف لا يتطابق مع المشاهد) ؛

الرجاء المساعدة!

لدي هذا الخطأ عندما أريد تحميل pdf من عنوان url خارجي

gildassamuel راجع # 6916 لمزيد من التفاصيل.

jonasyuandotcom في حالة إدارة الملف بنفسك ، يمكنك وضع الملف و pdfjs على نفس خادم الملفات.

مرحبًا ، لقد اتبعت التعليمات لتعيين "Access-Control-Allow-Origin" على خادم الملفات ولكني ما زلت أتلقى هذا الخطأ:
screen shot 2016-09-28 at 10 32 35 am
عناوين http هي كما يلي:
screen shot 2016-09-28 at 10 33 16 am
سيكون موضع تقدير أي مؤشرات ، حتى لو لم تكن متأكدًا من أنه يمكنك تقديم سبب محتمل للمشكلة. شكرا جزيلا لك!

yjguoo رسالة الخطأ والعناوين لا تضيف شيئًا.

أعتقد أن هدف إعادة التوجيه يفتقر إلى العناوين المتوقعة.

قم بزيارة chrome://net-internals/#events وكرر الخطوات لمشاهدة الرؤوس الفعلية لإعادة التوجيه المحظورة في السجل.

مرحبًا روب ، شكرًا على الرد السريع ،

لاحظت عندما أدخلت عنوان url المطلوب يدويًا "https://files.dev52.slack.com/files-pri/T076SHX5W-F07CGBKK2/git-for-beginners-handout.pdf" أحصل على رأس استجابة مختلف من خادم الملفات:
screen shot 2016-09-28 at 11 58 52 am
لاحظ أنه تم توجيهي إلى موقع مختلف في عنوان الاستجابة. وفي هذا الموقع الجديد ، أحصل على 200 موافق.
screen shot 2016-09-28 at 11 59 05 am
أسئلتي الأولى: هل هناك اختلاف بين كتابة عنوان url يدويًا في المتصفح مقابل كتابة XmlHttpRequest؟
راجع للشغل أنا أستخدم عارض pdf.js الافتراضي (html css js) تعمل جميع الوظائف باستثناء طلب ملف pdf من أصل مختلف (ei cross oring request issue)
السؤال الثاني: هل تعتقد أنها مشكلة من جانبي أو طريقة قيام viewer.js / pdf.js الافتراضي بتنفيذ XmlHttpRequest

شكرا لك :)

أسئلتي الأولى: هل هناك اختلاف بين كتابة عنوان url يدويًا في المتصفح مقابل كتابة XmlHttpRequest؟

نعم ، خاصة مع الطلبات عبر الأصل. عند تنفيذ طلب عبر الأصل ، لا يتم قبول الطلب إلا إذا سمح CORS بالطلب. سيصدر المتصفح طلبًا برأس Origin ، ويمكن للخادم استخدام هذا لتحديد ما إذا كان سيتم الموافقة على الطلب (من خلال تضمين الأصل المطلوب في رأس الاستجابة Access-Control-Allow-Origin ).

أيضًا ، لا يتم تضمين بيانات الاعتماد بشكل افتراضي في الطلبات عبر الأصل. لتضمين ملفات تعريف الارتباط ، يجب أن يستجيب الخادم بـ Access-Control-Allow-Credentials: true ويجب أن يحتوي طلب XHR على سمة withCredentials مضبوطة على true .

السؤال الثاني: هل تعتقد أنها مشكلة من جانبي أو طريقة قيام viewer.js / pdf.js الافتراضي بتنفيذ XmlHttpRequest

أعتقد أنه يجب تكوين خادمك بشكل مختلف.

راجع الوثائق على MDN لمزيد من المعلومات: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
أو اقرأ مواصفات CORS: https://www.w3.org/TR/2014/REC-cors-20140116/

مرحبًا روب ،

أعتقد أنني أصلحت المشكلة عن طريق تعيين Access-Control-Allow-Credentials: true . شكرا جزيلا للمساعدة <3. ومع ذلك ، لدي مشكلة أخرى تتعلق بإعادة التوجيه ولا أعرف ما إذا كان بإمكانك إعطائي بعض المؤشرات. أفعل XHR
طلب باستخدام عنوان URL رقم 1 (المشكلة التي تساعدني في حلها). ثم أحصل على إعادة توجيه إلى URL # 2 (الحالة 302). لكن كلا من URL # 1 و URL # 2 يشير إلى نفس الخادم. تسبب في الخطأ التالي:
screen shot 2016-09-29 at 9 40 41 am
حاولت تعيين نفس رؤوس الاستجابة كما فعلت لعنوان URL رقم 1 ولكني أدركت أنهما على نفس الخادم وأن الأصل فارغ.

أعتقد أن السبب في ذلك هو أن كلا عنوان URL يشير إلى نفس الخادم ، لذا فإن أصل إعادة التوجيه هو NULL لكنني لست متأكدًا تمامًا؟ الآن كيف يمكنني إضافة رؤوس تتعامل مع أصلين مختلفين ولكن كلا عنواني URL يشيران إلى خادم الملف نفسه. حاولت استخدام regex مثل * ولكن يبدو أنه غير مسموح به :( مرة أخرى ، شكرًا لك!

بعد إعادة التوجيه عبر الأصل ، يعيّن Chrome رأس Origin على القيمة "فارغة" بدلاً من عنوان URL الفعلي - https://crbug.com/154967

يمكنك إرجاع Access-Control-Allow-Origin بشروط بقيمة null ، ولكن فقط إذا كنت تريد أن تتمكن جميع مواقع الويب من قراءة هذا المورد . إذا لم يكن الأمر كذلك (وهو الأرجح) ، فعليك تجنب إعادة التوجيه. على سبيل المثال ، عن طريق إرسال الطلب مباشرة إلى عنوان URL المقصود (إذا كنت لا تعرف عنوان URL مقدمًا ، فأضف نقطة نهاية API جديدة إلى الخادم الخاص بك الذي يعرض عنوان URL المقصود).

شكرا لك! سانظر بداخلها :)

مرحبًا Rob ، هل تعتقد أن هناك طريقة أخرى لتهيئة عارض pdf أو pdf.js باستخدام src بالفعل وتجنب طلب XHR معًا؟

yjguoo يمكنك ترميز Base64 لبيانات PDF واستخدام عنوان URL للبيانات. بالنسبة لملفات PDF الكبيرة ، ينتج عن ذلك تجربة مستخدم أسوأ (= صفحة فارغة بدون شريط تقدم) لأن ترميز البيانات كـ base64 يزيد حجم الملف بنسبة 33٪. أوصي بمواصلة استخدام XHR لهذا السبب.

مرحبًا ، تم اختباره للتو ويعمل إذا تم تمكين CORS ، ولكن ما أراه هو أنه لا يحصل على الملف في أجزاء / نطاق إذا كان الملف كبيرًا جدًا.

حل إضافة هذا في htaccess:
تعيين الرأس قبول-نطاقات بايت
مجموعة الرأس Access-Control-Allow-Origin "*"
مجموعة الرأس طرق التحكم في الوصول والسماح "GET"
مجموعة الرأس Access-Control-Allow-Headers "Content-Type، Range"
مجموعة الرأس Access-Control-Expose-Headers "Accept-Ranges، Content-Encoding، Content-Length، Content-Range"

شكرا لك!!!

@ Rob - W لقد كانت مفيدة للغاية. هل من إمكانية منه للعمل من داخل المشروع (مثل تغيير رؤوس XHR)؟ (داخل worker.js)

مرحبًا ، لأي شخص لا يزال يواجه مشاكل مع هذا ، قمت بحلها مع:

https://drive.google.com/viewerng/viewer?embedded=true&url=http://www.africau.edu/images/default/sample.pdf

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

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

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

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

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

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

hp011235 picture hp011235  ·  4تعليقات