При рендеринге страниц pdf с использованием pdf.js некоторые страницы переворачиваются даже после размещения правильных номеров страниц. Переменная pagenos будет содержать номер страницы для отображения, а переменная b64Data будет иметь строку base64 файла PDF.
Пример. Предположим, у меня есть PDF-файл, содержащий 500 страниц. Если я попытаюсь загрузить страницы (235 236), выходные данные будут иметь порядок (236 235).
function renderPDF(url, canvasContainer, options) {
options = options || { scale: 1.75 };
function renderPage(page) {
var viewport = page.getViewport(options.scale);
var wrapper = document.createElement("div");
wrapper.className = "canvas-wrapper";
wrapper.id = "editor";
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
var renderContext = {
canvasContext: ctx,
viewport: viewport
};
canvas.height = viewport.height;
canvas.width = viewport.width+200;
wrapper.appendChild(canvas)
canvasContainer.appendChild(wrapper);
page.render(renderContext);
}
function renderPages(pdfDoc) {
var pagenos="";//page numbers to display on the canvas
var dataarr;
if (pagenos.indexOf(',') > -1) {
dataarr = pagenos.split(',');
for(var i=0;i<dataarr.length;i++){
pdfDoc.getPage(parseInt(dataarr[i])).then(renderPage);
}
}else{
dataarr = pagenos;
pdfDoc.getPage(parseInt(dataarr)).then(renderPage);
}
}
PDFJS.disableWorker = true;
PDFJS.getDocument(url).then(renderPages);
}
function getblobfrombase64(){
var b64Data="";//Base64 pdf to place
var byteCharacters = atob(b64Data);
var byteNumbers = new Array(byteCharacters.length);
for (var i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
debugger;
var byteArray = new Uint8Array(byteNumbers);
var blob = new window.Blob([byteArray], {type: "application/pdf"});
var pdf_url = URL.createObjectURL(blob);
renderPDF(pdf_url,document.getElementById('holder'));
}