Javascript 使用pdf.js以高质量呈现pdf

Javascript 使用pdf.js以高质量呈现pdf,javascript,pdf,html5-canvas,pdf.js,pixel-ratio,Javascript,Pdf,Html5 Canvas,Pdf.js,Pixel Ratio,我正在尝试使用pdf.js显示pdf。 我能够在所有设备上正确显示它。但是,在视网膜显示器和4k显示器上,它是模糊的 我发现,并且,我必须使用值窗口。devicePixelRatio 但我不是Javascript专家,也不知道如何使用它 此外,mozilla对如何设置像素比率有一个简单的解释(不是为我)。但是因为我刚开始学习JS,所以我被卡住了 这是我的密码: //如果提供了来自远程服务器的绝对URL,请配置CORS //该服务器上的头。 var url='1〕https://www.tec

我正在尝试使用pdf.js显示pdf。 我能够在所有设备上正确显示它。但是,在视网膜显示器和4k显示器上,它是模糊的

我发现,并且,我必须使用值
窗口。devicePixelRatio
但我不是Javascript专家,也不知道如何使用它

此外,mozilla对如何设置像素比率有一个简单的解释(不是为我)。但是因为我刚开始学习JS,所以我被卡住了

这是我的密码:


//如果提供了来自远程服务器的绝对URL,请配置CORS
//该服务器上的头。
var url='1〕https://www.tecmasolutions.com/clients/pdf/pdf-doppia-2.pdf';
//通过标签加载,创建访问PDF.js导出的快捷方式。
var pdfjsLib=window['pdfjs-dist/build/pdf'];
//应规定工人的财产。
pdfjsLib.GlobalWorkerOptions.workerSrc='/mozilla.github.io/pdf.js/build/pdf.worker.js';
var pdfDoc=null,
pageNum=1,
pageRendering=false,
pageNumPending=null,
canvas=document.createElement('the-canvas');
//ctx=canvas.getContext('2d');
canvas.style.height=“1000px”;
canvas.style.width=“900px”;
比例=2.5;
/**
*从文档中获取页面信息,相应地调整画布大小,并呈现页面。
*@param num页码。
*/
函数呈现页面(num){
pageRendering=true;
//使用promise获取页面
pdfDoc.getPage(num).然后(函数(第页){
var container=document.getElementById('the-container');
var canvas=document.getElementById('the-canvas');
var context=canvas.getContext('2d');
var viewport=page.getViewport(1);
var scale=container.clientWidth/viewport.width;
viewport=page.getViewport(比例);
canvas.height=viewport.height;
canvas.width=viewport.width;
var renderContext={
背景:背景,
视口:视口
};
var renderTask=page.render(renderContext);
//等待渲染完成
promise.then(函数(){
pageRendering=false;
如果(pageNumPending!==null){
//新页面呈现挂起
渲染页面(pageNumPending);
pageNumPending=null;
}
});
});
//更新页面计数器
document.getElementById('page_num')。textContent=num;
}
/**
*如果正在进行另一个页面渲染,请等待渲染完成
*完成了。否则,将立即执行渲染。
*/
函数queueRenderPage(num){
如果(页面渲染){
pageNumPending=num;
}否则{
渲染页面(num);
}
}
/**
*显示上一页。
*/
函数onPrevPage(){
如果(pageNum=pdfDoc.numPages){
返回;
}
pageNum++;
queueRenderPage(pageNum);
}
document.getElementById('next')。addEventListener('click',onNext');
/**
*异步下载PDF。
*/
pdfjsLib.getDocument(url).promise.then(函数(pdfDoc)){
pdfDoc=pdfDoc;
document.getElementById('page_count')。textContent=pdfDoc.numPages;
//初始/第一页呈现
渲染页面(pageNum);
});


pagina:1/45
这是使用一点jQuery来创建canvas元素

var canvas = $('<canvas/>').get(0),
    context = canvas.getContext('2d'),
    scale = window.devicePixelRatio || 1,
    viewport = page.getViewport({scale: scale}),
    view = page.view, // [x1, y1, x2, y2]
    width = view[2] - view[0],
    height = view[3] - view[1];

    context.scale(scale, scale);
    canvas.width = width * scale;
    canvas.height = height * scale;
    var renderContext = {
        canvasContext: context,
        viewport: viewport
    };
    page.render(renderContext).then(...)
var canvas=$('').get(0),
context=canvas.getContext('2d'),
比例=window.devicePixelRatio | | 1,
viewport=page.getViewport({scale:scale}),
视图=page.view,/[x1,y1,x2,y2]
宽度=视图[2]-视图[0],
高度=视图[3]-视图[1];
语境。尺度(尺度,尺度);
canvas.width=宽度*比例;
canvas.height=高度*比例;
var renderContext={
背景:背景,
视口:视口
};
render(renderContext)。然后(…)

这是使用jQuery创建canvas元素

var canvas = $('<canvas/>').get(0),
    context = canvas.getContext('2d'),
    scale = window.devicePixelRatio || 1,
    viewport = page.getViewport({scale: scale}),
    view = page.view, // [x1, y1, x2, y2]
    width = view[2] - view[0],
    height = view[3] - view[1];

    context.scale(scale, scale);
    canvas.width = width * scale;
    canvas.height = height * scale;
    var renderContext = {
        canvasContext: context,
        viewport: viewport
    };
    page.render(renderContext).then(...)
var canvas=$('').get(0),
context=canvas.getContext('2d'),
比例=window.devicePixelRatio | | 1,
viewport=page.getViewport({scale:scale}),
视图=page.view,/[x1,y1,x2,y2]
宽度=视图[2]-视图[0],
高度=视图[3]-视图[1];
语境。尺度(尺度,尺度);
canvas.width=宽度*比例;
canvas.height=高度*比例;
var renderContext={
背景:背景,
视口:视口
};
render(renderContext)。然后(…)

此代码修复了pdf模糊问题:

    var loadingTask = pdfjsLib.getDocument(this.url);
loadingTask.promise.then(function (pdf) {
    var scale = 1.3;
    inst.number_of_pages = pdf.numPages;

    for (var i = 1; i <= pdf.numPages; i++) {
        pdf.getPage(i).then(function (page) {
            var canvas = document.createElement('canvas');
            document.getElementById(inst.container_id).appendChild(canvas);             
            let ctx = canvas.getContext('2d')
            let dpr = window.devicePixelRatio || 1
            let bsr = ctx.webkitBackingStorePixelRatio ||
              ctx.mozBackingStorePixelRatio ||
              ctx.msBackingStorePixelRatio ||
              ctx.oBackingStorePixelRatio ||
              ctx.backingStorePixelRatio || 1
            let ratio = dpr / bsr
            let  originalviewport = page.getViewport({ scale: 1.5, });
            var viewport = page.getViewport({scale:screen.availWidth / originalviewport.width,})
            viewport = originalviewport
            canvas.width = viewport.width * ratio
            canvas.height = viewport.height * ratio
            canvas.style.width = viewport.width + 'px'
            canvas.style.height = viewport.height + 'px'
           ctx.setTransform(ratio, 0, 0, ratio, 0, 0)

            var renderContext = {
                canvasContext: ctx,
                viewport: originalviewport
            };
            var renderTask = page.render(renderContext);
            renderTask.promise.then(function () {
                $('.pdf-canvas').each(function (index, el) {
                    $(el).attr('id', 'page-' + (index + 1) + '-canvas');
                });
                inst.pages_rendered++;
                if (inst.pages_rendered == inst.number_of_pages) inst.initFabric();
            });
        });
    }
}, function (reason) {
    console.error(reason);
});
var loadingTask=pdfjsLib.getDocument(this.url);
loadingTask.promise.then(函数(pdf){
var标度=1.3;
说明页数=pdf.numPages;

对于(var i=1;i此代码修复了pdf模糊问题:

    var loadingTask = pdfjsLib.getDocument(this.url);
loadingTask.promise.then(function (pdf) {
    var scale = 1.3;
    inst.number_of_pages = pdf.numPages;

    for (var i = 1; i <= pdf.numPages; i++) {
        pdf.getPage(i).then(function (page) {
            var canvas = document.createElement('canvas');
            document.getElementById(inst.container_id).appendChild(canvas);             
            let ctx = canvas.getContext('2d')
            let dpr = window.devicePixelRatio || 1
            let bsr = ctx.webkitBackingStorePixelRatio ||
              ctx.mozBackingStorePixelRatio ||
              ctx.msBackingStorePixelRatio ||
              ctx.oBackingStorePixelRatio ||
              ctx.backingStorePixelRatio || 1
            let ratio = dpr / bsr
            let  originalviewport = page.getViewport({ scale: 1.5, });
            var viewport = page.getViewport({scale:screen.availWidth / originalviewport.width,})
            viewport = originalviewport
            canvas.width = viewport.width * ratio
            canvas.height = viewport.height * ratio
            canvas.style.width = viewport.width + 'px'
            canvas.style.height = viewport.height + 'px'
           ctx.setTransform(ratio, 0, 0, ratio, 0, 0)

            var renderContext = {
                canvasContext: ctx,
                viewport: originalviewport
            };
            var renderTask = page.render(renderContext);
            renderTask.promise.then(function () {
                $('.pdf-canvas').each(function (index, el) {
                    $(el).attr('id', 'page-' + (index + 1) + '-canvas');
                });
                inst.pages_rendered++;
                if (inst.pages_rendered == inst.number_of_pages) inst.initFabric();
            });
        });
    }
}, function (reason) {
    console.error(reason);
});
var loadingTask=pdfjsLib.getDocument(this.url);
loadingTask.promise.then(函数(pdf){
var标度=1.3;
说明页数=pdf.numPages;
对于(var i=1;i