我正在尝试使用 Pdf.js 库显示 pdf。此 pdf 保存在 IndexedDb 上的 blob 中,然后创建我通过属性传递给组件的 url。
父元素:
<pdf-viewer id="pdfElement" Pdf="${URL.createObjectURL(this.Pdf)}"></pdf-viewer>
“this.Pdf”包含 blob 文件
子元素:
import { LitElement, html } from 'lit-element';
import * as pdfjsLib from 'pdfjs-dist';
class PdfViewer extends LitElement {
static get properties() {
return{
Pdf: {type: String}
}
}
constructor() {
super();
console.log("pdf-viewer start");
this.readyPromise = new Promise(resolve => {
this.resolveReady = resolve;
});
}
connectedCallback() {
super.connectedCallback();
this.resolveReady();
}
render(){
html`
<style>
canvas{
box-shadow: 0 3px 6px #0004;
border-radius: 6px;
}
</style>
<canvas id="canvas"></canvas>
`;
}
attributeChangedCallback(attr, oldVal, val) {
console.log("[pdf-viewer] Attribute: ", attr, "changed from ",oldVal, " to ", val);
if (attr === "pdf" && val != null) {
this.setPdf(val);
}
}
async setPdf(file) {
console.log("pdf-viewer setPdf path: ", file)
await this.readyPromise;
/*let typedarray = new Uint8Array(file);
console.log("typedarray", typedarray)*/
let loadingTask = pdfjsLib.getDocument(file);
loadingTask.promise.then(pdf => {
for (let i = 1; i <= pdf.numPages; i++) {
console.log('PDF loaded');
pdf.getPage(i).then(function (page) {
console.log('Page loaded');
let scale = 1.5;
const viewport = page.getViewport({scale: scale});
// Prepare canvas using PDF page dimensions
const canvas = this.shadowRoot.getElementById('canvas');
const context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
// Render PDF page into canvas context
let renderContext = {
canvasContext: context,
viewport: viewport
};
const renderTask = page.render(renderContext);
renderTask.promise.then(function () {
console.log('Page rendered');
});
});
}
}, function (reason) {
// PDF loading error
console.error(reason);
});
}
}
customElements.define("pdf-viewer", PdfViewer);
目前,运行代码,我收到此错误: 来自控制台 Web 的错误
npm i pdfjs-dist -save
我按照 gitlab 文档( )通过 npm 安装了库
对这个库没有太多经验,并且找到了一个不是很详尽的文档,我请求你帮助解决这个问题