pdfjs-dist v3.x渲染pdf
import './App.css'
import * as pdfjsLib from "pdfjs-dist";
import { useEffect, useRef, useState } from 'react'
pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdn.bootcdn.net/ajax/libs/pdf.js/3.9.179/pdf.worker.min.js'
function App() {
// 定义一些页面所需变量
const [page, setPage] = useState(1);
const [pages, setPages] = useState(0);
const containerRef = useRef(null);
const [pdfDocument, setPdfDocument] = useState(null);
const renderPage = async (num, pdfDoc = pdfDocument) => {
if (!pdfDoc) { return false }
const pdfPage = await pdfDoc.getPage(num);
const viewport = pdfPage.getViewport({ scale: 1.5 });
const canvas = containerRef.current;
canvas.width = viewport.width;
canvas.height = viewport.height;
const ctx = canvas.getContext("2d");
const renderTask = pdfPage.render({
canvasContext: ctx,
viewport,
});
return renderTask.promise;
}
/**
* 初始化pdfView
*/
const initPdfView = async () => {
const pdfPath = 'https://cos.dingshaohua.cn/aegis/1.pdf';
const pdfDocument = await pdfjsLib.getDocument(pdfPath).promise;
setPages(pdfDocument.numPages)
setPdfDocument(pdfDocument);
renderPage(page, pdfDocument);
}
/**
* 下一页
*/
const onNext = () => {
if (page < pages) {
setPage(page + 1)
}
}
const onPrev = () => {
if (page > 1) {
setPage(page - 1)
}
}
/**
* 一些钩子
*/
useEffect(() => {
initPdfView();
}, [])
useEffect(() => {
renderPage(page);
}, [page])
return (
<div className='app'>
<div className='skip'>
<input type="number" min={1} max={pages} value={page} onChange={(e) => { setPage(Number(e.target.value)) }} />/{pages}
<div onClick={onNext}>下一页</div> <div onClick={onPrev}>上一页</div>
</div>
<canvas ref={containerRef}></canvas>
</div>
)
}
export default App
.app{
position: absolute;
margin: auto;
left: 0;
right: 0;
width: 50%;
height: 90%;
overflow: auto;
}
.skip{
background-color: aqua;
width: 260px;
position: fixed;
right: 0;
top: 0;
padding: 10px;
display: flex;
z-index: 3;
}
.skip input{
width:20%;
}
.skip div{
background-color: gray;
cursor: pointer;
user-select: none;
margin-left: 10px;
}
注意点:这里并没有使用pdf_viewer模式的渲染方式,和pdf_viewer比起来 这里要计算缩放度,而且比较糊,据说有svg模式 但是没有还没试
pdfjs-dist v3.x渲染pdf的更多相关文章
- 使用pdfjs插件在线预览PDF文件
前言 本文介绍在html中使用 pdfjs插件在线预览PDF文件的方法. 实现步骤 下载 pdfjs 并引入项目中 到PDFJS官网 http://mozilla.github.io/pdf.js/g ...
- Asp.net Core 3.1 Razor视图模版动态渲染PDF
Asp.net Core 3.1 Razor视图模版动态渲染PDF 前言 最近的线上项目受理回执接入了电子签章,老项目一直是html打印,但是接入的电子签章是仅仅对PDF电子签章,目前还没有Html电 ...
- Asp.net MVC Razor视图模版动态渲染PDF,Razor模版生成静态Html
Asp.net MVC Razor视图模版动态渲染PDF,Razor模版生成静态Html 1.前言 上一篇文章我开源了轮子,Asp.net Core 3.1 Razor视图模版动态渲染PDF,然后,很 ...
- xhtmlrenderer渲染pdf,中文换行
在实际开发中,发现在table中显示中文,渲染出来的pdf,中文内容不自动换行.经过搜索发现了一种解决方案,如下: 重写Breaker,修改right计算方式 /* * Breaker.java * ...
- 实战动态PDF在线预览及带签名的PDF文件转换
开篇语: 最近工作需要做一个借款合同,公司以前的合同都是通过app端下载,然后通过本地打开pdf文件,而喜欢创新的我,心想着为什么不能在线H5预览,正是这个想法,说干就干,实践过程总是艰难的,折腾了3 ...
- pdf.js pdfdom.js使用(转)
开篇语: 最近工作需要做一个借款合同,公司以前的合同都是通过app端下载,然后通过本地打开pdf文件,而喜欢创新的我,心想着为什么不能在线H5预览,正是这个想法,说干就干,实践过程总是艰难的,折腾了3 ...
- pdf.js使用教程
pdf.js框架的魅力所在,为其为HTML5实现的,无需任何本地支持,而且对浏览器的兼容性也是比较好,要求只有一个:浏览器支持HTML5就好了!(不过对于低版本的IE,就只能节哀了!) 据说IE9以上 ...
- 动态PDF在线预览
实战动态PDF在线预览及带签名的PDF文件转换 开篇语: 最近工作需要做一个借款合同,公司以前的合同都是通过app端下载,然后通过本地打开pdf文件,而喜欢创新的我,心想着为什么不能在线H5预览,正是 ...
- vue2.0全局组件之pdf
目的:像elementUI那样注册全局组件 预览pdf文件 技术支持:使用火狐的pdf.js http://mozilla.github.io/pdf.js/ 准备:新建一个CPdf.vue文件,把火 ...
- H5拖拽 构造拖拽及缩放 pdf展示
前言: 协助项目需要实现一个签名的功能. 功能说明:1.有文本签名和头像签名.2.头像签名需要实现可拖拽功能.3.需要展示的是pdf的文件并需要获取签名位于pdf文件的相对位置. 功能一:实现拖拽 思 ...
随机推荐
- AI时代:开源大模型选择
https://docs.llamaindex.ai/en/stable/module_guides/models/llms.html 可以按参数和评分来选择模型: https://huggingfa ...
- Python+Appium+unittest案例
代码如下: # coding=utf-8 import time import unittest from appium import webdriver class MyTestCase(unitt ...
- 🎀SpringBoot项目打包jar 并打包为exe启动
简介 将SpringBoot项目打包jar并打包为exe启动,在无jdk环境下直接运行. 操作 SpringBoot打包为可执行jar(这里使用maven install) 注:如果存在前端页面需同时 ...
- Git的基础使用(一)
Git版本管理工具的作用: (1)完整的记录项目代码变化的过程 (2)备份每一个变化过程的代码版本 (3)多人协同开发 1.配置全局变量 (1)配置用户名 git config --global us ...
- eolinker取数组数据合并成一个数据的方法
有时候遇到数据存在某一个数组中,类似下图结构,而用到这些数据的接口又需要一个数据集合,比如这样[14224, 14223]. 思路使用后置脚本,创建一个集合,把这两项数据取出来来,然后放到集合里,脚本 ...
- Sentinel源码—3.ProcessorSlot的执行过程
大纲 1.NodeSelectorSlot构建资源调用树 2.LogSlot和StatisticSlot采集资源的数据 3.Sentinel监听器模式的规则对象与规则管理 4.AuthoritySlo ...
- 2.7K star!这个汉字工具库让中文处理变得超简单,开发者必备!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 cnchar 是一个功能全面的汉字工具库,提供拼音转换.笔画动画.偏旁查询.成语接龙.语音合 ...
- Java--事务,操作数据库,实现转账
更新:2019/3/29 目录 简介 事务的四个特性 一个小Demo 目录结构 jdbc.properties JDBCUtil.java TestTransaction.java[核心代码] 数据库 ...
- Rust 在 Linux 下的安装
Rust 在 Linux 下的安装 我感觉, Rust 这个语言, 集 C, C++, Java, Scala, JavaScript, TypeScript, Python ... 等语言的优势于一 ...
- Web前端入门第 52 问:JavaScript 的应用领域
截至目前,您应该对前端的 HTML + CSS 应该有了很清楚的认知,至少实现一个静态网页已经完全不在话下了. 当然,CSS 功能绝不止这些,一些不太常用的 CSS 相关知识,后续将通过案例进行分享. ...