<p>لا يعمل pdf.js مع needjs</p>

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

يوضح HTML التالي المشكلة:

<html> <head> <title>Flexpaper React/Require Sandbox</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.2.0/require.js"></script> <script> require(['pdf'], function(pdf) { console.log('PDFJS Module: ' + pdf); console.log('PDFJS Global: ' + window.PDFJS); }); </script> </head> </html>

يقوم ملف pdf.js باكتشاف وجود وظائف "تتطلب" و "تحديد" وبالتالي لا يقوم بتعيين مثيل PDFJS العام. ومع ذلك ، فإنه لا يُرجع أيضًا إشارة إلى هذا المثال من خلال أداة تحميل الوحدة النمطية.

نظرًا لأن كلا من "pdf" و "window.PDFJS" غير معرّفين في المثال أعلاه ، لا يمكن استخدام المكتبة في التطبيقات التي تتطلب استخدامًا. هذا هو الحال بغض النظر عما إذا كان طلب يُستخدم لتحميل pdf.js.

لاحظ أن هذا يعمل بشكل صحيح مع الإصدار 1.0.1040 ولكنه فشل مع 1.4.20 و 1.5.188. لم أختبر مع إصدارات أخرى غير تلك 3. كان السلوك ثابتًا في جميع الإصدارات الثلاثة بين Chrome و Safari.

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

نظرًا لأنني كنت أعاني قليلاً من المراجع الصحيحة في RequireJS أيضًا ، سأترك الحل الخاص بي ، وهو جزء من تكوين RequireJS:

paths: {
    'pdfjs-dist/build/pdf': 'myfolder/pdf.min',
    'pdfjs-dist/build/pdf.worker': 'myfolder/pdf.worker.min'
}

عندما تفعل ذلك على هذا النحو ، لا يتعين عليك حتى تعيين المسار للعامل إلى PDFJS.workerSrc ، كما هو مقترح في الأمثلة ، لأنه سيتم العثور على العامل تلقائيًا.

ال 18 كومينتر

ما هو "pdf"؟ هل يمكنك تقديم مثال كامل؟

بالتأكيد ، سأقوم بإعداد Github repo للتوضيح بشكل كامل.

ها هو الريبو: https://github.com/MartinSnyder/pdfjs-with-requirejs

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

لن تكون هذه صفقة كبيرة بشكل طبيعي ، باستثناء أن شيئًا ما داخل pdf.js يكتشف وجود أداة تحميل وحدة ثم لا يقوم بتعيين كائن PDFJS العام. نظرًا لعدم وجود أيٍ منهما ، لا يمكنك استخدام المكتبة عندما تكون requestjs على الصفحة.

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

توجد مشكلتان في الكود:

  1. الوحدة النمطية غير مشار إليها باسمها ، استخدم "pdfjs-dist / build / pdf" (وإذا كنت تنقل pdfjs-dist في مكان مختلف ، فاستخدم request.config لتغيير الموقع)
  2. أنت تستخدم document.write ، مما يؤدي إلى مسح المستند

جرب شيئًا مثل:

        require.config({paths: {'pdfjs-dist': './node_modules/pdfjs-dist'}});
        require(['pdfjs-dist/build/pdf'], function(pdf) {
            console.log('PDFJS Module: ' + pdf + '<br>');
            console.log('PDFJS Global: ' + window.PDFJS);
        });

الختام كما أجاب.

لاحظ أن هذا يعمل بشكل صحيح مع الإصدار 1.0.1040

العمل في هذا الإصدار هو أحد الآثار الجانبية لـ needjs تحميل برنامج نصي كعلامة نصية عادية - لا يشير إلى أنه متوافق مع يتطلب .js

قم بتعيين مثيل PDFJS العام

ستتم إزالة ملفات PDFJS العالمية في الإصدارات المستقبلية ، لذا إذا كنت تستخدم يتطلب js يمكنك استخدام نفس الكائن عبر pdf.PDFJS /

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

فيما يتعلق بالنقطة 2:
تم ذلك لتبسيط المثال. بغض النظر عما يفعله المثال ، فإن المراجع غير محددة ولا يمكن استخدام المكتبة. على وجه التحديد ، يؤدي التبديل إلى console.log أيضًا إلى إظهار المراجع على أنها غير محددة.

فيما يتعلق بإزالة ملفات PDFJS العالمية في الإصدارات المستقبلية:
أنا بخير مع ذلك ، ولكن كيف يُفترض أن يشير المرء إلى المكتبة عبر pdf.PDFJS عندما يكون ملف pdf غير محدد؟

لم أستخدم العقدة لتضمين pdf.js في هذا المثال

لم أفترض أنك تستخدم node.js.

تنزيل التوزيع الرسمي ونسخ pdf.js في الدليل الجذر للعينة.

PDF.js هي مكتبة وتتكون من العديد من الملفات ، على سبيل المثال ، قد تقوم وحدة pdfjs-dist / build / pdf بتحميل وحدة pdfjs-dist / build / pdf.worker

لهذا السبب ، فإن الإشارة إليه على أنه "pdf" يعد أمرًا صحيحًا.

ما زلت بحاجة إلى استخدام اسم AMD مهما كان مدرجًا في التعريف ، راجع https://github.com/MartinSnyder/pdfjs-with-requirejs/blob/master/pdf.js#L21

هل جربت المثال أعلاه مع إظهار required.config للإشارة إلى المكتبة الكاملة؟

هل جربت المثال أعلاه مع إظهار required.config للإشارة إلى المكتبة الكاملة؟

لقد أكملت ذلك الآن وهو يعمل كما قلت.

هل هذا يعني أنه لا يمكنك استخدام التوزيع "الذي تم تنزيله" الموجود هنا لهذا الغرض؟
https://mozilla.github.io/pdf.js/getting_started/#download

طالما أنك تستخدم حزمة العقدة 'pdfjs-dist' ، فأنت بخير ، لكن الإصدار الذي تم تنزيله ليس من المفترض أن يعمل مع هذا؟

طالما أنك تستخدم حزمة العقدة 'pdfjs-dist' ، فأنت بخير ، لكن الإصدار الذي تم تنزيله ليس من المفترض أن يعمل مع هذا؟

أعتقد أن الأمر لا يتعلق بالموضوع ، ولكن لا يزال بإمكانك استخدام ملفات pdf.js / pdf.worker.js من هذه الحزمة ، ونقطة تتطلب js 'pdfjs-dist' إلى الموقع المضغوط (ستعمل منذ pdf.js و pdf. توجد ملفات worker.js في مجلد الإنشاء).

ما زلت بحاجة إلى استخدام اسم AMD مهما كان مدرجًا في التعريف ، راجع https://github.com/MartinSnyder/pdfjs-with-requirejs/blob/master/pdf.js#L21

كان هذا هو الجزء الأساسي الذي كنت أفتقده من فهمي. شكرا لك على الوقت الذي قضيته في شرحه لي.

مرحبًا ، لدي مشكلة مماثلة ، لذا لن أقوم بفتح قضية جديدة ، لكن اسأل هنا ، آمل أن يكون هذا على ما يرام.
أحاول تطبيق عارض استنادًا إلى https://github.com/mozilla/pdf.js/blob/master/examples/components/simpleviewer.js باستخدام يتطلب. ولكن عندما أطلب ملفات pdf.js و pdf_viewer.js ، فإن PDFJS.PDFViewer يكون غير محدد.

هنا نموذج الريبو: https://github.com/Lazzi/pdfjs-bower-requirejs

Lazzi تبدو وحدة main.js الخاصة بك غريبة حقًا بالنسبة لـ AMD ، جرب:

define('main', ['pdfjs-dist/build/pdf', 'pdfjs-dist/web/pdf_viewer'], function(pdfjsLib, viewer, require) {

التوافق ليس AMD ، لذلك لا أعرف كيف ستعمل.

نعم ، إنها ليست AMD ، لكنها تدعم أيضًا هذا النوع من تعريف الوحدة: http://requirejs.org/docs/api.html#cjsmodule.

ومع ذلك ، لم يُصلح التغيير الذي اقترحته مشكلتي ..

Lazzi أرى ، دعونا نجرب # 7332 (اسم AFAIK AMD مهم)

yurydelendik يعمل! لقد كانت مفيدة جدا. شكرا لك.

قد يعمل هذا من أجلك بالإضافة إلى وضعك في ملف التكوين الخاص بك

    map: {
        '*': {
            'pdfjs-dist/build/pdf.worker' : 'path/to/your/install/pdf.worker'
        }
    },

وظيفة الخريطة هي في الأساس عبارة عن استبدال سلسلة عالمية و "*" هي التبعيات التي يجب استخدام سلسلة استبدالها - تستخدم في الغالب لتضمين إصدارات مختلفة من libs لملفات libs الأخرى. مثل وجود نسختين من JQuery تعمل بالتوازي. كن حذرًا في الاستخدام - نظرًا لأنه لا يؤدي إلا إلى استبدال السلسلة ، فقد ينتهي بك الأمر إلى استبدال المسارات في تبعيات أخرى إذا كانت متطابقة.

سيكون احتمال "*" في هذه الحالة هو فقط تبعية pdf.js الرئيسية.

نظرًا لأنني كنت أعاني قليلاً من المراجع الصحيحة في RequireJS أيضًا ، سأترك الحل الخاص بي ، وهو جزء من تكوين RequireJS:

paths: {
    'pdfjs-dist/build/pdf': 'myfolder/pdf.min',
    'pdfjs-dist/build/pdf.worker': 'myfolder/pdf.worker.min'
}

عندما تفعل ذلك على هذا النحو ، لا يتعين عليك حتى تعيين المسار للعامل إلى PDFJS.workerSrc ، كما هو مقترح في الأمثلة ، لأنه سيتم العثور على العامل تلقائيًا.

شكرا لك dmaxweiler! لقد عانيت من نفس المشكلة - كنت أواجه مشكلة في تحميل pdf.js بشكل صحيح عند استخدام RequireJS أيضًا. الحل الخاص بك يعمل معي! مذهل. شكرا لمساعدتك.

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