svelte - 使用 mozilla 中的 pdfjs 库在 svelte 应用程序中显示 pdf 文件
问题描述
我有一个 Showpdf.svelte 组件,如下面的代码所示。如果在组件的 App.svelte 中调用此代码并执行此代码,则 pdf 文件不会显示在浏览器中,而是会下载。我想使用 sveltejs 应用程序在浏览器中显示一个 pdf 文件。如果有人帮助解决这个问题,我将不胜感激。
<script>
pdfjsLib
.getDocument("https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf")
.then((doc) => {
console.log(doc._pdfInfo.numPages);
doc.getPages(1).then((page) => {
let myCanvas = document.getElementById("my_canvas");
let context = myCanvas.getContetxt("2d");
let viewport = page.getViewport(1);
myCanvas.width = viewport.width;
myCanvas.height = viewport.height;
page.render({
canvasContext: context,
viewport: viewport,
});
});
});
</script>
<style>
</style>
<canvas id="my_canvas" />
解决方案
您可以使用该bind:this
指令获得对画布的引用,并使用它来呈现 PDF,如文档的示例部分所述。
例子
<svelte:head>
<script src="//mozilla.github.io/pdf.js/build/pdf.js"></script>
</svelte:head>
<script>
let canvasRef;
const data = atob(
'JVBERi0xLjcKCjEgMCBvYmogICUgZW50cnkgcG9pbnQKPDwKICAvVHlwZSAvQ2F0YWxvZwog' +
'IC9QYWdlcyAyIDAgUgo+PgplbmRvYmoKCjIgMCBvYmoKPDwKICAvVHlwZSAvUGFnZXMKICAv' +
'TWVkaWFCb3ggWyAwIDAgMjAwIDIwMCBdCiAgL0NvdW50IDEKICAvS2lkcyBbIDMgMCBSIF0K' +
'Pj4KZW5kb2JqCgozIDAgb2JqCjw8CiAgL1R5cGUgL1BhZ2UKICAvUGFyZW50IDIgMCBSCiAg' +
'L1Jlc291cmNlcyA8PAogICAgL0ZvbnQgPDwKICAgICAgL0YxIDQgMCBSIAogICAgPj4KICA+' +
'PgogIC9Db250ZW50cyA1IDAgUgo+PgplbmRvYmoKCjQgMCBvYmoKPDwKICAvVHlwZSAvRm9u' +
'dAogIC9TdWJ0eXBlIC9UeXBlMQogIC9CYXNlRm9udCAvVGltZXMtUm9tYW4KPj4KZW5kb2Jq' +
'Cgo1IDAgb2JqICAlIHBhZ2UgY29udGVudAo8PAogIC9MZW5ndGggNDQKPj4Kc3RyZWFtCkJU' +
'CjcwIDUwIFRECi9GMSAxMiBUZgooSGVsbG8sIHdvcmxkISkgVGoKRVQKZW5kc3RyZWFtCmVu' +
'ZG9iagoKeHJlZgowIDYKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDEwIDAwMDAwIG4g' +
'CjAwMDAwMDAwNzkgMDAwMDAgbiAKMDAwMDAwMDE3MyAwMDAwMCBuIAowMDAwMDAwMzAxIDAw' +
'MDAwIG4gCjAwMDAwMDAzODAgMDAwMDAgbiAKdHJhaWxlcgo8PAogIC9TaXplIDYKICAvUm9v' +
'dCAxIDAgUgo+PgpzdGFydHhyZWYKNDkyCiUlRU9G'
);
// Loaded via <script> tag, create shortcut to access PDF.js exports.
const pdfjsLib = window['pdfjs-dist/build/pdf'];
// The workerSrc property shall be specified.
pdfjsLib.GlobalWorkerOptions.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.js';
pdfjsLib
.getDocument({ data }).promise
.then(doc => doc.getPage(1))
.then(page => {
const scale = 1.5;
const viewport = page.getViewport({ scale });
// Prepare canvas using PDF page dimensions
var context = canvasRef.getContext('2d');
canvasRef.height = viewport.height;
canvasRef.width = viewport.width;
// Render PDF page into canvas context
var renderContext = {
canvasContext: context,
viewport: viewport
};
page.render(renderContext);
});
</script>
<canvas bind:this={canvasRef} />
推荐阅读
- r - 将 2 级因子转换为 TRUE / FALSE
- c# - ASP.Net Core Post 访问被拒绝
- go - dgrijalva/jwt-go 可以对 MapClaims 进行声明,但不能对 StandardClaims 进行声明?
- leaflet - 为什么取消版本后仍然选择传单标记?
- azure - Azure 逻辑应用 - 调用安全端点 (TLS)
- c++ - 将模板模板参数与默认参数匹配
- git - 如何在提交任何内容之前恢复意外删除的 git 存储库
- spring-boot - 为什么没有从 GIT 中选择 Spring Boot Cloud Config Server 属性
- excel - 如何将匹配函数的值放在 VBA 中的偏移单元格中
- mysql - mysql查询优化器