Ответ 1
Я собрал некоторый полный код и смог найти проблему с решением ниже:
var int8View = new Uint8Array(...); //populate int8View with the raw pdf data
PDFJS.getDocument(int8View).then(function(pdf) {
}
При использовании этого решения я столкнулся с проблемой, которую видели другие пользователи (@MurWade и @user94154) - сообщение об ошибке stream must have data
. Похоже, проблема заключается в следующей строке:
var int8View = new Uint8Array(...);
Массив, содержащий данные, не создается должным образом, поскольку данные не находятся в ожидаемом формате. Следовательно, эта строка работает в некоторых случаях, но может не работать в общем случае.
Я собрал полное решение, которое, похоже, работает лучше. Он загружает PDF файл и преобразует его в необработанный поток PDF. Это только для целей тестирования, в реальном мире поток PDF, вероятно, будет получен другим способом. Вы можете проверить поток в отладчике, и он будет отображаться как обычный текст. Ниже приведена ключевая строка кода, чтобы этот образец работал. Вместо этого преобразование необработанного потока PDF в массив, преобразование его в данные.
var docInitParams = { data: pdfraw };
Затем продолжайте загрузку данных. Ниже приведен полный рабочий пример загрузки стандартного необработанного потока PDF и его отображения. В качестве отправной точки я использовал PDF-образец PDF JS hello. Пожалуйста, дайте мне знать в комментариях, если это необходимо для разъяснения.
'use strict';
PDFJS.getDocument('helloworld.pdf').then(function(pdf) {
pdf.getData().then(function(arrayBuffer) {
var pdfraw = String.fromCharCode.apply(null, arrayBuffer);
var docInitParams = {
data: pdfraw
};
PDFJS.getDocument(docInitParams).then(function(pdfFromRaw) {
pdfFromRaw.getPage(1).then(function(page) {
var scale = 1.5;
var viewport = page.getViewport(scale);
var canvas = document.getElementById('the-canvas');
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
var renderContext = {
canvasContext: context,
viewport: viewport
};
page.render(renderContext);
});
});
});
});