Pdf.js: لا يمكن استخدام نفس اللوحة أثناء عمليات التقديم () المتعددة

تم إنشاؤها على ٢٨ أغسطس ٢٠١٨  ·  13تعليقات  ·  مصدر: mozilla/pdf.js

باستخدام أحدث إصدار من pdfjs (2.0.550) ، تلقيت الخطأ التالي:

لا يمكن استخدام نفس اللوحة أثناء عمليات التقديم () المتعددة.

الكود الذي أستخدمه للعرض هو كما يلي:

function renderPage(pageNumber, renderOptions) {
                var documentId = renderOptions.documentId;
                var pdfDocument = renderOptions.pdfDocument;
                var scale = renderOptions.scale;
                var rotate = renderOptions.rotate;
                // Load the page and annotations
                return Promise.all([pdfDocument.getPage(pageNumber), _PDFJSAnnotate2.default.getAnnotations(documentId, pageNumber)]).then(function (_ref) {
                    var _ref2 = _slicedToArray(_ref, 2);
                    var pdfPage = _ref2[0];
                    var annotations = _ref2[1];
                    var page = document.getElementById('pageContainer' + pageNumber);
                    var svg = page.querySelector('.annotationLayer');
                    var canvas = page.querySelector('.canvasWrapper canvas');
                    var canvasContext = canvas.getContext('2d', {alpha: false});
                    var viewport = pdfPage.getViewport(scale, rotate);
                    var transform = scalePage(pageNumber, viewport, canvasContext);
                    var renderContext = {
                        canvasContext: canvasContext,
                        viewport: viewport,
                        transform: transform
                    };
                    // Render the page
                    return Promise.all([pdfPage.render(renderContext), _PDFJSAnnotate2.default.render(svg, viewport, annotations)]).then(function () {
                        // Text content is needed for a11y, but is also necessary for creating
                        // highlight and strikeout annotations which require selecting text.
                        return pdfPage.getTextContent({normalizeWhitespace: true}).then(function (textContent) {
                            return new Promise(function (resolve, reject) {// Render text layer for a11y of text content
                                var textLayer = page.querySelector('.textLayer');
                                var textLayerFactory = new pdfjsViewer.DefaultTextLayerFactory();
                                var textLayerBuilder = textLayerFactory.createTextLayerBuilder(textLayer, pageNumber - 1, viewport);
                                textLayerBuilder.setTextContent(textContent);
                                textLayerBuilder.render();// Enable a11y for annotations
                                // Timeout is needed to wait for `textLayerBuilder.render`
                                setTimeout(function () {
                                    try {
                                        (0, _renderScreenReaderHints2.default)(annotations.annotations);
                                        resolve();
                                    } catch (e) {
                                        reject(e);
                                    }
                                });
                            });
                        });
                    }).then(function () {// Indicate that the page was loaded
                        page.setAttribute('data-loaded', 'true');
                        return[pdfPage, annotations];
                    });
                });
            }

هذا الجزء من الكود مأخوذ من مشروع التعليق التوضيحي js:
https://github.com/instructure/pdf-annotate.js/blob/master/docs/index.js

كما يمكنك أن ترى أيضًا أن كل صفحة لها قماش خاص بها. لذا ، لا أعرف لماذا ما زلت أتلقى مثل هذا الخطأ.

ما الخطأ الذي يحدث وأين أحتاج إلى البحث فيه؟

1-other

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

أي تحديثات بشأن هذه المسألة ؟

ال 13 كومينتر

atnsm وإخوانه ، هل يمكنني معرفة ما إذا كنت تستخدم التعليق التوضيحي بتنسيق PDF في Angular 2+؟

أنا لا أعتقد ذلك. فيما يلي قائمة بجميع التبعيات:
https://github.com/instructure/pdf-annotate.js/blob/master/package.json

نفس المشكلة ، كيفية إصلاح هذا.

رؤية نفس الخطأ مع react-pdf-js وهو غلاف حول pdfjs-dist .

باستخدام أحدث إصدار من pdfjs (2.0.550) ، تلقيت الخطأ التالي:

من المحتمل جدًا أن تكون هذه المشكلة نسخة مكررة من # 9456 ، وفي هذه الحالة تم إصلاحها بواسطة PR # 9853 (والتي لم تصل في الوقت المناسب ليتم تضمينها في الإصدار 2.0.550 ).

أود أن أقول ذلك أيضا. دعنا نغلق هذا ويمكننا دائمًا إعادة الفتح إذا تم الانتهاء من الإصدار 2.0 الأخير وظلت المشكلة.

واجهت نفس المشكلة. المساعدة المطلوبة.

أي تحديثات بشأن هذه المسألة ؟

حصلت على هذه المشاكل عندما أستخدم pdfjs في الزاوية 8. آمل أن يساعد شخصًا ما:

ngOnDestroy العامة () {
إذا (this._pdf) {
this._pdf.destroy () ،
}
إذا (this.renderTask) {
this.renderTask.cancel () ،
}
}
في وظيفة التصيير ، يجب أن تحصل على عنصر canvas بواسطة: this.element.nativeElement.children [0] بدلاً من الاستعلام باستخدام مستند dom

أي تحديثات بشأن هذه المسألة ؟

أواجه نفس المشكلة ، باستخدام لوحة قماشية واحدة لإظهار المستندات ويمكن للمستخدم تحديد أحد المستندات المتعددة لعرضها

أواجه نفس المشكلة ، باستخدام لوحة قماشية واحدة لإظهار المستندات ويمكن للمستخدم تحديد أحد المستندات المتعددة لعرضها

يجب عليك إلغاء عملية تصيير pdf ثم إتلافها قبل أن تتمكن من تقديم ملف pdf جديد

هل يمكن لشخص ما أن يشرح الطريقة الصحيحة لإلغاء نفس الصفحة وإعادة تصييرها؟

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

لكن استدعاء cancel للمهمة السابقة لا يزال لا يحل المشكلة حيث يتم عرض الصفحة في بعض الأحيان رأسًا على عقب ، والذي من المفترض أن يحدث إذا كنت تقوم بتشغيل مهمتي عرض على نفس اللوحة.

يتطلب حل huannxdev أيضًا تدمير ملف pdf. لكني لا أريد أن أضطر إلى إعادة تحميله فقط لإعادة عرض صفحة واحدة.

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