我必须在我的页面上使用PDFJS库显示PDF。问题是,由于我给予比例作为一个固定数字画布,PDF在其中呈现是没有响应的,不适合引导网格列宽度。以下是HTML代码:
<div class="row">
<div class="col-md-1" style="padding-right: 15px;">
<input type="button" ng-click="openPreviousPage()"/>
</div>
<div class="col-md-8">
<canvas id="the-canvas" style="border: 1px solid black;"></canvas>
</div>
<div class="col-md-1 col-md-offset-2" style="padding-right:15px;">
<input type="button" ng-click="openNextPage()" />
</div>
</div>
和我的 typescript :
openPage = (pdf: PDFDocumentProxy, pageNumber: number) => {
pdf.getPage(pageNumber).then(function getPage(page) {
var scale = 1;
var viewport = page.getViewport(scale);
var canvas = <HTMLCanvasElement>document.getElementById('the-canvas');
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
var renderContext = {
canvasContext: context,
viewport: viewport
};
//...rest of actions
});
}
如果有任何提示我会很感激的。
3条答案
按热度按时间hs1ihplo1#
您可以将
id
放在画布容器div
上,并根据div.clientWidth
和viewport.width
设置比例。在HTML代码上:
然后在控制器上:
希望这对你有帮助...
nwwlzxa72#
对于任何从Acroforms示例开始工作的人来说,您可能会注意到viewport.width与您检查时在屏幕上呈现的内容不匹配,这使得上面的解决方案呈现的PDF比预期的要大。在我的例子中,viewport.width是612,但是渲染到816。我最终发现这是存在于pdf_viewer. js中的CSS_UNITS变量的结果。一旦我发现了这一点,我在谷歌上搜索了一下,发现这段对话是在讨论它的目的:
"In the html/css world 1in = 96pixels, in PDF the default is 1in = 72pixels. The scale is used so when showing 100% a PDF that is 8.5in should show up on the screen as 8.5in."
为了调整这个变量(它不是全局变量),我只是在本地再次声明它,然后调整上面的比例公式以包含它,如下所示:
现在对我来说效果很好。希望我能为你们中的一个节省一些时间。:)
干杯!干杯!
4ioopgfo3#
使用 Bootstrap 并将**class =“img-fluid”**放入画布中。