English | 简体中文
PDF.js 已经提供了 Viewer 用于PDF文件的在线预览,并且提供了一部分的批注功能(FREETEXT、HIGHLIGHT、STAMP、INK)。
在实际使用中,需要各种形式的批注工具,逐产生在viewer上扩展做额外批注的想法。
项目基于konva、react、antd、web-highlighter,使用外部引入的方式,不影响 pdfjs viewer 原有代码,增加并扩展了一部分批注类型,支持pdf文件中原有批注的编辑、新增批注数据的提交及加载,效果见下图:
对PDF Viewer来说,这是一个很有用的功能,如果需求只是简单的批注,项目中的现有功能已经可以直接满足。 如果有更特殊的需求或功能要求,可以在此基础上进一步开发。
- 矩形
- 圆形
- 自由绘制,一段时间内的绘制会被归为一组
- 自由高亮,有自动修正
- 文字
- 签名
- 盖章,自由上传图片
- 文字高亮
- 文字删除线
- 文字下划线
- 选择,选中对象,可双击删除
💡仅支持PDF 文件中原有批注的编辑,不支持将批注写入到 PDF 文件,如需写入批注到文件,请使用提交的批注数据并在服务器上处理写入
- 矩形 Square
- 圆形 Circle
- 自由绘制 Ink
- 文字 FreeText
- 线段 Line
- 多边形 Polygon
- 折线 PolyLine
- 备注 Text
- 高亮 Highlight
- 下划线 Underline
- 删除线 StrikeOut
$ npm install 或 yarn
$ npm run dev 或 yarn dev
仓库自带了一个 DEMO 示例(在examples文件夹中, 进入 ./examples/pdfjs-4.3.136-dist 目录
$ miniserve 或其他静态服务
打开地址:http://localhost:8080/web/viewer.html 即可看到效果
ae_username= 批注人姓名,添加批注时显示的批注人姓名
ae_get_url= 批注数据地址,通过此地址加载已保存的批注数据 示例 ./examples/pdfjs-4.3.136-dist/pdfjs-annotation-extension-testdata.json
ae_post_url= 批注数据提交地址
src/const/default_options.ts
加载PDF文件批注,需修改:
LOAD_PDF_ANNOTATION: true, // 是否加载 pdf 原有批注
注意: 如果需要编辑 pdf 原有批注,需将 pdfjs 中的 annotationMode 改为 0,这样 pdfjs 才不会渲染批注
pdfjs-dist/web/viewer.mjs
annotationMode: {
value: 0, //这里改为 0
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
},
配置在文件:/configuration/environment.js 中 默认为 examples/pdfjs-4.3.136-dist/web/pdfjs-annotation-extension 您可将它修改为您pdfjs dist地址,以方便开发
output: path.resolve(__dirname, '../examples/pdfjs-4.3.136-dist/web/pdfjs-annotation-extension'),
$ npm run build 或 yarn build
也可以直接下载发布版本
修改文件:pdfjs-dist/web/viewer.html,只需增加一行代码,引入生成的文件即可
<script src="../build/pdf.mjs" type="module"></script>
<link rel="stylesheet" href="viewer.css">
<script src="viewer.mjs" type="module"></script>
<!--这里引入生成的文件-->
<script src="./pdfjs-annotation-extension/pdfjs-annotation-extension.js" type="module"></script>
<!--这里引入生成的文件-->
</head>
利用pdfjs EventBus捕获页面事件,动态插入Konva绘图层,在Konva上绘制图形 批注类型虽然看上去多了,但实际支持与pdfjs一致,只是做了一些特殊的转换。 关于 pdfjs 批注类型的说明请看这里 👇 https://github.com/mozilla/pdf.js/wiki/Frequently-Asked-Questions#faq-annotations
目前仅测试 pdfjs-4.3.136-dist, 不支持页面旋转后的绘制