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文件的相对位置. 功能一:实现拖拽 思 ...
随机推荐
- Linux终端居然也可以做文件浏览器?
大家好,我是良许. 在抖音上做直播已经整整 5 个月了,我很自豪我一路坚持到了现在[笑脸] 最近我在做直播的时候,也开始学习鱼皮大佬,直播写代码.当然我不懂 Java 后端,因此就写写自己擅长的 Sh ...
- JAVA---在idea上实现简易的学生管理系统
登录需求 代码实现 APP package ITswj.test4_学生管理系统; import java.util.ArrayList; import java.util.Random; impor ...
- RocketMQ的Producer是如何发送消息的
RocketMQ 的 Producer 发送消息过程涉及多个步骤,包括初始化.消息创建.发送方式选择 1.Producer初始化 首先,我们需要创建并初始化一个Producer示例 这段代码完成了以下 ...
- Redis Stream消息队列
工具类部分内容 package com.hwd.campus.common.redis.utils; import com.hwd.campus.common.redis.constant.Redis ...
- ElasticSearch学习——帮助类
ElasticSearch第五步-.net平台下c#操作ElasticSearch详解 - 梦亦晓 - 博客园 (cnblogs.com) C# 如何使用 Elasticsearch (ES) - 领 ...
- Python3循环结构(二) while循环
Python3 while循环 当循环次数无界时通常会使用while循环. 1.使用while循环输出九九乘法表 i=1 while i < 10: j = 1 while j < i + ...
- 告别 .NET 7,支持将于 5 月结束——我们几乎不认识你
微软 .NET 7 软件框架的支持将于 5 月结束,这距离其 2022 年发布仅过去 18 个月--这提醒我们,长期更新时代正在成为过去. .NET 7 于 2022 年 11 月 8 日首次亮相,与 ...
- Coze 初体验之打造专属的编程助手
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- python开发Streamable HTTP MCP应用
一.概述 使用python开发,最好的框架是fastmcp,github连接:https://github.com/jlowin/fastmcp 2025 年 5 月 9 日,fastmcp发布v2. ...
- React Native开发鸿蒙Next---灰度模式
React Native开发鸿蒙Next---灰度模式 政企相关的App在开发过程中,往往需要制作一个灰度模式,用于应对注入国家公祭日等特殊日期情况.Harmony开发中,由于基于ArkTs,处理相对 ...