在使用umi 构建的react项目中如何实现预览pdf ??如果PDF中包含印章该如何使印章展示出来???
1.安装依赖
yarn add react-pdf
react-pdf : https://github.com/wojtekmaj/react-pdf
我项目中使用的react-pdf 版本为5.2.0。
2. 加载workerSrc
imprt { pdfjs } from 'react-pdf'; - 在app.ts文件中指定workerSrc加载资源路径:
pdfjs.GlobalWorkerOptions.workerSrc = https://xxx.pdf.worker.min.js; ,umi会在运行时会自动执行app.ts。
需要注意的是资源 版本必须与react-pdf 版本匹配,我项目总使用的是2.5.207 : 对应使用https://cdn.bootcdn.net/ajax/libs/pdf.js/2.5.207/pdf.worker.js
3. 基本使用
import { Document, Page } from reacf-pdf;
const [current, setCurrent] = useState(1);
const [total, setTotal] = useState();
<Pagination simple current={current} total={total} onChange={(current) => setCurrent(page)}
<Document
option={{
cMapUrl:"“https://xxx.cmaps/",
cMapPacked: true,
}}
renderMode="canvas"
file={pdfUrl}
onLoadSuccess={({ numPages }) => setTotal(pageNumber)}
>
<Page
pageNumber={nowPage}
/>
</Document>
- 必须指定
CMap 的 基础 参数: cMapUrl 和 cMapPacked - 您需要从
pdfjs-dist 复制 cMaps (React-PDF 的依赖项 - 如果您安装了 React-PDF ,它应该在您的 node_modules 中)。 cMaps 位于 pdfjs-dist/cmaps 。
4. 显示印章
客户在浏览器中使用开源PDF.JS插件预览签署后的PDF文件时会遇到无法显示电子签章的情况,这是因为PDF.JS因无法进行校验电子签名故而默认隐藏了电子签章。 如果需要显示电子签章则需要在pdf.worker.js 中找到以下代码并进行注释
if (data.fieldType === "Sig") {
data.filedValue = null;
}
或者某些版本的PDF.JS需要在pdf.worker.js中找到如下代码并进行注释
var parent = Annotation.prototype;
Util.inherit(WidgetAnnotation,Annotation,{
isViewable:
function WidgetAnnotation_isViewable(){
return parent.isViewable.call(this);
}
});
最后看下效果图
|