Pdfh5
web/h5/移动端PDF预览插件,可手势缩放。支持npm install和script标签引入
Install / Use
/learn @gjTool/Pdfh5README
pdfh5.js
有问题可以加Q群咨询,技术交流群,也可以探讨技术,另有开发技术讨论微信群可以问群主拉入微信群

更新信息
-
2025.10.19 更新: v3.0.0大版本更新,支持官方pdf.js v5.4.296,移除svg渲染模式,恢复懒加载模式,新增分段加载模式,新增沙箱集成(防止JavaScript注入等),新增密码pdf文件预览,优化手势缩放(后续会继续优化,目前还是有问题)。
-
根据需求选择加载模式:小文件直接全部加载,中等文件用懒加载,大文件用分段加载。如果同时配置多个模式,按优先级:分段加载 > 懒加载 > 传统加载。
pdfh5在线预览
https://pdfh5.gjtool.cn/pdfh5/password.pdf 密码 123456zxcv..
快速开始(有两种方式)
一、script标签引入方式
- 1.创建div容器
<div id="demo"></div>
- 2.引入pdfh5.js(插件会自动检测并加载PDF.js资源)
<script src="js/pdfh5.js"></script>
- 3.实例化
var pdfh5 = new Pdfh5(document.querySelector("#demo"), {
pdfurl: "./default.pdf"
});
二、npm安装方式(适应于vue), react使用方法类似vue(example/react-test是react使用示例)
- 1.安装
npm install pdfh5
-
2.静态资源引用
将pdfh5文件夹下的cmaps、iccs、standard_fonts、wasm、js/pdf.worker.min.js都放置到public静态资源目录下
-
3.使用
<script setup lang="ts">
import Pdfh5 from "pdfh5"
import { ref, onMounted, onUnmounted } from 'vue'
const container = ref<HTMLElement>()
let pdfViewer: any = null
onMounted(async () => {
try {
console.log('Pdfh5构造函数:', Pdfh5);
// 创建PDF查看器
pdfViewer = new Pdfh5(container.value!, {
pdfurl: "/git.pdf",
textLayer: true,
workerSrc:"./pdf.worker.min.js",
cMapUrl: './cmaps/',
standardFontDataUrl: './standard_fonts/',
iccUrl: './iccs/',
wasmUrl: './wasm/'
});
console.log('PDF查看器创建成功:', pdfViewer);
} catch (error) {
console.error('PDF初始化失败:', error);
}
})
onUnmounted(() => {
if (pdfViewer && typeof pdfViewer.destroy === 'function') {
pdfViewer.destroy()
}
})
</script>
<template>
<div class="pdf-container" ref="container"></div>
</template>
<style scoped>
.pdf-container {
width: 100%;
height: 100vh;
}
</style>
API接口方法
实例化
- pdfh5实例化的时候传两个参数,selector选择器,options配置项参数,会返回一个pdfh5实例对象,可以用来操作pdf,监听相关事件
var pdfh5 = new Pdfh5(selector, options);
|参数名称 |类型 |取值 |是否必须 |作用 | |:---:|:---:|:---:|:---:|:---:| |selector | HTMLElement | - | √ |pdfh5的容器,html DOM元素对象 | |options | Object | - | × |pdfh5的配置项参数 |
options配置项参数列表
- 示例: 配置项参数 pdfurl
var pdfh5 = new Pdfh5(document.querySelector("#demo"), {
pdfurl: "./default.pdf"
});
基础配置
|参数名称 |类型 |取值 |默认值 |作用 | |:---:|:---:|:---:|:---:|:---:| |pdfurl | String | PDF文件地址 | - |pdf地址 | |data | Array(arraybuffer) | PDF文件流数据 | - |pdf文件流 ,与pdfurl二选一(二进制PDF数据。使用类型化数组(Uint8Array)可以提高内存使用率。如果PDF数据是BASE64编码的,请先使用atob()将其转换为二进制字符串。) | |password | String | PDF密码 | null |PDF密码(如果有密码保护) | |goto | Number | 页码数字 | 0 |加载pdf跳转到第几页(0表示不跳转) |
渲染配置
|参数名称 |类型 |取值 |默认值 |作用 | |:---:|:---:|:---:|:---:|:---:| |scale | Number |渲染比例 |1 |pdf渲染的比例 | |textLayer | Boolean |true、false |false |是否开启textLayer,可以复制文本 | |enableHWA | Boolean |true、false |true |是否启用硬件加速,对图片渲染很重要 | |cMapUrl | String |字体映射文件路径 |智能检测|解析pdf时,特殊情况下显示完整字体的cmaps文件夹路径 | |standardFontDataUrl| String |标准字体路径 |智能检测|标准字体文件路径 | |iccUrl | String |颜色配置文件路径 |智能检测|颜色管理配置文件路径 | |wasmUrl | String |WebAssembly文件路径 |智能检测|高性能PDF渲染的WebAssembly文件路径 | |workerSrc | String |PDF.js Worker路径 |智能检测|PDF.js Worker文件路径 |
交互配置
|参数名称 |类型 |取值 |默认值 |作用 | |:---:|:---:|:---:|:---:|:---:| |scrollEnable | Boolean |true、false |true |是否允许pdf滚动 | |zoomEnable | Boolean |true、false |true |是否允许pdf手势缩放 | |resize | Boolean |true、false |true |是否允许窗口大小变化时重新渲染 |
懒加载配置
|参数名称 |类型 |取值 |默认值 |作用 | |:---:|:---:|:---:|:---:|:---:| |lazyLoad | Boolean |true、false |false |启用懒加载模式,只渲染可见页面 |
分段加载配置
|参数名称 |类型 |取值 |默认值 |作用 | |:---:|:---:|:---:|:---:|:---:| |progressiveLoading | Boolean |true、false |false |启用分段加载模式,PDF.js官方流式加载+智能内存管理 | |chunkSize | Number |数字,单位字节 |65536 |分块大小,默认64KB | |maxMemoryPages | Number |数字 |5 |最大内存页面数,超过会自动清理远距离页面 | |maxImageSize | Number |数字,单位字节 |8388608|最大图片大小,8388608,兼容iOS Safari | |canvasMaxAreaInBytes| Number |数字,单位字节 |8388608|最大canvas面积,iOS Safari浏览器canvas限制约为16777216 |
UI组件配置
|参数名称 |类型 |取值 |默认值 |作用 | |:---:|:---:|:---:|:---:|:---:| |loadingBar | Boolean |true、false |true |是否显示加载进度条 | |pageNum | Boolean |true、false |true |是否显示左上角页码 | |backTop | Boolean |true、false |true |是否显示右下角回到顶部按钮 |
其他配置
|参数名称 |类型 |取值 |默认值 |作用 | |:---:|:---:|:---:|:---:|:---:| |goto | Number |页码数字 |0 |加载pdf跳转到第几页 | |enableHWA | Boolean |true、false |true |是否启用硬件加速,对图片渲染很重要 |
手势缩放配置
|参数名称 |类型 |取值 |默认值 |作用 | |:---:|:---:|:---:|:---:|:---:| |tapZoomFactor | Number |数字 |2 |双击缩放倍数 | |zoomOutFactor | Number |数字 |1.2 |缩放回弹因子 | |animationDuration| Number |数字,单位毫秒 |300 |缩放动画持续时间 | |maxZoom | Number |数字 |4 |最大缩放倍数 | |minZoom | Number |数字 |0.5 |最小缩放倍数 | |dampingFactor | Number |数字 |0.85 |阻尼因子 |
注释编辑器配置
|参数名称 |类型 |取值 |默认值 |作用 | |:---:|:---:|:---:|:---:|:---:| |annotationEditorMode| String |"NONE"、"FREETEXT"、"HIGHLIGHT"、"INK"、"STAMP"、"SIGNATURE" |"NONE" |注释编辑器模式 | |editorParams | Object |编辑器参数对象 |{} |注释编辑器参数配置 |
沙箱安全配置
|参数名称 |类型 |取值 |默认值 |作用 | |:---:|:---:|:---:|:---:|:---:| |sandboxEnabled | Boolean |true、false |true |是否启用沙箱模式,防止JavaScript注入和XSS攻击 |
沙箱配置选项(sandboxOptions)
|参数名称 |类型 |取值 |默认值 |作用 | |:---:|:---:|:---:|:---:|:---:| |allowScripts | Boolean |true、false |false |是否允许JavaScript执行 | |allowForms | Boolean |true、false |true |是否允许表单交互
