PDF预览
基于react-pdf组件实现
主要还是基于pdf.js来实现
import React, { useState } from "react";
import { Document, Page, pdfjs } from "react-pdf";
// 注意:pdf.worker.js版本需要和pdfjs的版本保持一致
pdfjs.GlobalWorkerOptions.workerSrc = "/pdfjs/pdf.worker.js";
function PDFViewer({filePath: string}) {
// pdf文件的总页数
const [numPages, setNumPages] = useState<number>(0);
const onDocumentLoadSuccess = ({ numPages }: any) => {
setNumPages(numPages);
};
return (
<Document
options=
file={filePath}
onLoadSuccess={onDocumentLoadSuccess}
loading={<div>pdf加载中...</div>}
>
{/* 加载pdf中所有的页面内容 */}
{new Array(numPages).fill("page").map((item, index) => (
<Page
key={index}
width={document.body.offsetWidth || 375}
pageNumber={index + 1}
/>
))}
</Document>
);
}
export default PDFViewer;
pdf.worker.js说明
因为解析和渲染PDF需要较长的时间,可能会阻塞其它JS代码的运行, 所以pdf.js引入了WebWorkers(通过从主线程中移除大量CPU操作(如解析和渲染)来提升性能)。
签名或者盖章图片不能显示
处理方法:
if (data.fieldType === "Sig") {
// 注释"pdf.worker.js"中下面的2行代码
// data.fieldValue = null;
// this.setFlags(_util.AnnotationFlag.HIDDEN);
}