使用react-pdf预览pdf_react pdf预览-程序员宅基地

技术标签: react.js  react  

在使用umi构建的react项目中如何实现预览pdf ??如果PDF中包含印章该如何使印章展示出来???

1.安装依赖

yarn add react-pdf

  • react-pdf: https://github.com/wojtekmaj/react-pdf

我项目中使用的react-pdf版本为5.2.0。

2. 加载workerSrc

  1. imprt { pdfjs } from 'react-pdf';
  2. 在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;

// 保存PDF当前页数,用于实现翻页
const [current, setCurrent] = useState(1);
// 总页数,用于实现翻页
const [total, setTotal] = useState();

// render
<Pagination simple current={
    current} total={
    total} onChange={
    (current) => setCurrent(page)}
<Document
	option={
    {
    
		cMapUrl:"“https://xxx.cmaps/", // 预定义的 Adob​​e CMap 所在的 URL。包括尾部斜杠。
		cMapPacked: true, // 指定 Adob​​e CMap 是否为二进制打包。
	}}
	renderMode="canvas" // 定义文档呈现形式
	file={
    pdfUrl} // pdf,可以是一个URL、File、或者包含url、data、range、httpHeaders的对象
	onLoadSuccess={
    ({
     numPages }) => setTotal(pageNumber)}
>
	<Page
		pageNumber={
    nowPage} //当前页码
	/>
</Document>
  1. 必须指定 CMap 的 基础 参数: cMapUrlcMapPacked
  2. 您需要从 pdfjs-dist 复制 cMapsReact-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;
	//this.setFlags(_util.AnnotationFlag.HIDDEN); //注释此行后可显示电子签章
}

或者某些版本的PDF.JS需要在pdf.worker.js中找到如下代码并进行注释

var parent = Annotation.prototype; 
Util.inherit(WidgetAnnotation,Annotation,{
    
	isViewable:
	function WidgetAnnotation_isViewable(){
     
	// 注释掉if判断,不让它返回false
	/* if (this.data.fieldType === 'Sig') {
        warn('unimplemented annotation type: Widget signature');
        return false;
      }*/
	return parent.isViewable.call(this); 
	} 
});

最后看下效果图

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44704740/article/details/125696869

智能推荐

python语言中1010的二进制表示_Python语言中的按位运算-程序员宅基地

文章浏览阅读2.3k次。(转)位操作是程序设计中对位模式或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算).简单来说,按位运算就把数字转换为机器语言——二进制的数字来运算的一种运算形式。在计算机系统中,数值一律用补码来表示(存储)。Python中的按位运算符有:左移运算符(&..._位串1010的二进制

使用windows11 + linux 虚拟机,端口被占用_wsl 端口占用-程序员宅基地

文章浏览阅读560次。解决windows分配Linux端口太靠前的问题。_wsl 端口占用

第一章:什么是软件架构?_allocation structures-程序员宅基地

文章浏览阅读1k次。What Software Architecture Is系统的软件体系结构是指系统所需的一组结构,包括软件元素、它们之间的关系以及两者的属性。结构是由一个关系集合在一起的一组元素。We call runtime structures component-and-connector (C&amp;C) structures.Allocation structures describe the ma..._allocation structures

求链式线性表的倒数第K项_c语言 求链式线性表的倒数第k项 分数 12 作者 ds课程组 单位 浙江大学 给定一系列-程序员宅基地

文章浏览阅读565次。求链式线性表的倒数第K项给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。输入格式:输入首先给出一个正整数K,随后是若干非负整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。输出格式:输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL。输入样例:4 1 2 3 4 5 6 7 8 9 0 -1输出样例:7标程​ 单链表版#include<map>#include<list>#include<cm_c语言 求链式线性表的倒数第k项 分数 12 作者 ds课程组 单位 浙江大学 给定一系列

使用YOLOX进行物体检测_yolox 刀具-程序员宅基地

文章浏览阅读1.4k次。YOLOX 是旷视开源的高性能检测器。旷视的研究者将解耦头、数据增强、无锚点以及标签分类等目标检测领域的优秀进展与 YOLO 进行了巧妙的集成组合,提出了 YOLOX,不仅实现了超越 YOLOv3、YOLOv4 和 YOLOv5 的 AP,而且取得了极具竞争力的推理速度。其中YOLOX-L版本以 68.9 FPS 的速度在 COCO 上实现了 50.0% AP,比 YOLOv5-L 高出 1.8% AP!还提供了支持 ONNX、TensorRT、NCNN 和 Openvino 的部署版本,本文将详细介绍如_yolox 刀具

一文搞懂 UML 类图!!!_uml类图-程序员宅基地

文章浏览阅读2.9k次,点赞27次,收藏45次。统一建模语言UML类图是一种用于描述系统结构的图形化工具。它以类和对象为基础,主要用于表示系统中的类、接口、继承关系、关联关系等元素,以及它们之间的静态结构和关系。在本文中,将深入介绍UML类图的基本元素关系类型以及如何创建一个简单而有效的类图。类图以反映类的结构(属性、操作)以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模方法。类图用来描述系统中有意义的概念,包括具体的概念、抽象的概念、实现方面的概念等,是对现实世界中事物的抽象。_uml类图

随便推点

重装Office后打开outlook和excel提示找不到VCRUNTIME140_1.dll的解决办法_打开excel提示vcruntime140-程序员宅基地

文章浏览阅读1.7w次,点赞3次,收藏8次。最近发现有的电脑重装Office后打不开outlook和excel,提示找不到VCRUNTIME140_1.dll。如下图所示VCRUNTIME140_1.dll是C++ 2015的一个组件,一般我直接用DirectX Repair运行库修复工具,开启强力修复,更新C++解决。如果不行的话直接卸载C++再重新安装也是可以的。..._打开excel提示vcruntime140

docker overlay网络详解-程序员宅基地

文章浏览阅读1w次,点赞10次,收藏36次。之前我们学习的网络是单台主机的网络通讯方案,这里我们学习的是跨跨主机。我们原生的docker跨主机方案有macvlan和overlay,这里我们重点学习overlay第三方网络插件有flannel,calico,weave网络。docker网络之所以这么活跃,是因为网络部分的代码单独抽离出来成为docker的网络库,即libnetwork。为了标准化网路驱动的开发步骤和支持各种网络驱动,libnetwork中使用了CNM(container network model),CNM定义了构建容器_docker overlay

数据可视化——Matlab平台gramm工具箱绘制散点相关图_gramm工具箱画图-程序员宅基地

文章浏览阅读6k次,点赞6次,收藏30次。数据可视化——Matlab平台gramm工具箱绘制散点相关图概述:基于matlab平台的gramm工具箱绘制散点相关图使用的工具箱:gramm。gramm工具箱使得matlab平台的图形绘制能力更加强大,绘制出的图形更美观,同时,绘制图形需要设置的参数相对较少。gramm工具箱可在以下链接中下载:https://github.com/piermorel/gramm将下载好的工具箱解压之后,通..._gramm工具箱画图

Rxjava3文档级教程一: 介绍和基本使用-程序员宅基地

文章浏览阅读3.9w次,点赞33次,收藏175次。一 Rxjava3简介RxJava是响应式编程(Reactive Extensions)的java实现,它基于观察者模式的实现了异步编程接口。Rxjava 3.x 的github官网RxJava2将被支持到2021年2月28日,错误的会同时在2.x和3.x修复,但新功能只会在3.x上添加。Rxjava 3.0的一些改变:官方WikiRxjava 3.x 文档可以在官方javad..._rxjava

hssfrow 单元格样式_POI设置excle单元格样式-程序员宅基地

文章浏览阅读124次。public class ExcelTest {/*** @param args*/public static void main(String[] args) throws IOException {try {HSSFWorkbook wb = new HSSFWorkbook();HSSFSheet sheet = wb.createSheet("new sheet");HSSFCellS..._hssfrow.setcellstyle

python解析http数据包_python如何解析HTTP返回的标准数据包-程序员宅基地

文章浏览阅读1.5k次。该篇内容由个人博客点击跳转同步更新!转载请注明出处!前言最近有一个需求需要频繁调用xx接口,但这个接口调用次数一多就会给你禁掉,而且一禁就是禁一天的那种,只能通过界面模拟用户操作抓取数据包,然后单独对这些数据包进行处理具体步骤首先看下需要格式化的数据包长什么样 数据包这就是完整的一个数据包,网上基本都是格式化json数据包的,但返回的内容中还包含了头信息等所以不能简单的通过json来格式化,..._python解析http.client.httpresponse

推荐文章

热门文章

相关标签