我有一个固定的框,我想在PDF.js中显示我的PDF文件。由于PDF.js文档无法真正访问(通过源文件进行吐出),我想知道是否可以在固定宽度上缩放渲染的PDF。当我为显示PDF的画布设置为CSS:canvas { width: 600px; }
时,PDF会被拉伸,质量会变差。
答案 0 :(得分:57)
我更新了Pdf.js github http://jsbin.com/pdfjs-prevnext-v2/edit#html,live中的示例,以正确缩放到固定的画布宽度。有关我的代码,请参阅http://jsfiddle.net/RREv9/。
重要的一行是
var viewport = page.getViewport(canvas.width / page.getViewport(1.0).width);
因为表达式canvas.width / page.getViewport(1.0).width
为我们提供了适当的缩放因子。
您应该更改画布的宽度,而不是使用css,而是使用画布的width
属性。见Canvas width and height in HTML5
答案 1 :(得分:10)
为确保缩放适用于所有页面尺寸(Letter,A4,A5等),您必须考虑到页面尺寸更改时高度和宽度之间的比例会有所不同。例如,流行的页面大小(以英寸为单位)是:
您可以通过考虑高度和宽度来计算正确的比例,并且只缩放较小的量。这将确保一切适合您的画布。此外,如果您更改画布的宽度或高度,则不会破坏任何内容。
var unscaledViewport = page.getViewport(1);
var scale = Math.min((canvas.height / unscaledViewport.height), (canvas.width / unscaledViewport.width));
var viewport = page.getViewport(scale);
答案 2 :(得分:1)
如果使用版本 >= 2.1 及更高版本,它需要一个对象,即格式化为
getViewport({ scale, rotation, dontFlip })
:
const viewport = page.getViewport({scale: canvas.width / page.getViewport({scale: 1}).width});
#10369 [api-minor] 更改 PDFPageProxy 上的 getViewport 方法,以获取参数对象而不是一堆(随机)排序的参数