я собрал некоторый полный код и был в состоянии найти проблемы с ниже решения:
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);
});
});
});
});
Приятно, принимая этот ответ, поскольку он кажется более полным, чем мой оригинальный! – Swiss
Спасибо! Сообщите мне, могу ли я сделать что-нибудь, чтобы улучшить его. –
@ user94154, делает ли это решение на ваш вопрос? –