Некоторые страницы pdf отображаются в обратном порядке с использованием pdf.js - PullRequest
0 голосов
/ 08 января 2019

При рендеринге страниц 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'));
}
...