Я пытаюсь прочитать весь документ PDF с помощью PDF.js, а затем отобразить все страницы на одном холсте.Render .pdf to single Canvas с использованием pdf.js и ImageData
Моя идея: вынести каждую страницу на холст и получить ImageData (context.getImageData()), очистить холст на следующей странице. Я сохраняю все ImageDatas в массиве и, как только все страницы там, я хочу поместить все ImageDatas из массива в один холст.
var pdf = null;
PDFJS.disableWorker = true;
var pages = new Array();
//Prepare some things
var canvas = document.getElementById('cv');
var context = canvas.getContext('2d');
var scale = 1.5;
PDFJS.getDocument(url).then(function getPdfHelloWorld(_pdf) {
pdf = _pdf;
//Render all the pages on a single canvas
for(var i = 1; i <= pdf.numPages; i ++){
pdf.getPage(i).then(function getPage(page){
var viewport = page.getViewport(scale);
canvas.width = viewport.width;
canvas.height = viewport.height;
page.render({canvasContext: context, viewport: viewport});
pages[i-1] = context.getImageData(0, 0, canvas.width, canvas.height);
context.clearRect(0, 0, canvas.width, canvas.height);
p.Out("pre-rendered page " + i);
});
}
//Now we have all 'dem Pages in "pages" and need to render 'em out
canvas.height = 0;
var start = 0;
for(var i = 0; i < pages.length; i++){
if(canvas.width < pages[i].width) canvas.width = pages[i].width;
canvas.height = canvas.height + pages[i].height;
context.putImageData(pages[i], 0, start);
start += pages[i].height;
}
});
Так что, как я понимаю, это должно работать, не так ли? Когда я запускаю это, я получаю холст, который достаточно большой, чтобы содержать все страницы pdf, но не показывает pdf ...
Благодарим за помощь.
очистное содержания действительно оказалось быть проблемой Спасибо ^^ –
@markE, я пытался вам решение, но это не сработало. Все, что мне нужно, это использовать пример Helloworld для отображения всех страниц в формате pdf (проект pdf.js слишком сложный и не подходит для моих нужд). Не могли бы вы предложить некоторые исправления? –
Многие/все браузеры накладывают [макс. Ограничение размера] (http://stackoverflow.com/questions/6081483/maximum-size-of-a-canvas-element) на элементы холста, поэтому для достаточно больших PDF-файлов он выиграл ' t работать в любом случае. В последнее время я много борется с этим, и лучшее решение IMO было, как вы предлагаете, показывать одну страницу за раз. – Marxama