本文章介绍 Vue 项目中 PDF 批注插件库 ElasticPDF 在线版 API 示例教程,API 包含 ① 导出批注后PDF数据;② 导出纯批注 json 数据;③ 加载旧批注;④ 切换文档;⑤ 切换用户;⑥ 清空批注 等数据处理功能,可满足通常业务需求。本教程可用于月付许可和在线测试版,欢迎 联系我们 咨询和获取接入 key。
0 ElasticPDF 产品介绍
ElasticPDF基于开源pdf.js,增加了多种开箱即用的 PDF 批注功能。代码包延续了 pdf.js-dist 独立且完全离线的结构风格,仅增加了用于支持批注的离线 Javascript 代码,可以快速完美集成到任何可以运行Javascript, HTML, CSS 的项目环境中,在公网及内网环境都可以完美的运行。
根据不同的功能及预算需求,有两个版本的产品可供选择,两者仅在最终的批注保存阶段有区别,产品 Demo 地址如下:
① 批注合成版: https://demos.libertynlp.com/#/pdfjs-annotation\
② 专业批注版: https://www.elasticpdf.com/demo
1 导入页面 HTML 及初始化
首先将以下代码导入到目标页面,其中包含了初始化代码 initialPDFEditor()
和接收所有回报信息的函数 listenPDFEditorMessage()
,所有导出的 PDF数据,批注数据 都在函数listenPDFEditorMessage()
下,可以与后续的业务融合。
2 调用 API
① 导出批注数据
导出 pdf 批注的 json 数据,可以用于后续的筛选、合并、入库保存等业务流程,非常适用于在线批注流程,因为只需要保存一个原 pdf 文档,然后从数据库中仅加载和回显批注,可以节省很多的服务器性能、流量和带宽费用。
// export annotations data 导出可保存的批注对象
function outputAnnotation() {
elasticpdf_viewer.postMessage({
"source": "test-elasticpdf",
"function_name": "outputAnnotation",
"content": ""
}, '*');
}
② 导入旧批注
从服务器中依据文件 ID 或 PDF 链接加载 ① 中导出的批注数据并回显至文档上,支持再次操作编辑,以此来实现批注数据的云端同步。
// reload old annotation data
// 加载旧批注
function reloadOldAnnotationData() {
var old_annotation = getOldAnnotation();
elasticpdf_viewer.postMessage({
"source": "test-elasticpdf",
"function_name": "setFileAnnotation",
"content": old_annotation
}, '*');
}
// Generate simulated old annotation data
// 生成模拟旧批注数据
function getOldAnnotation() {
var old_annotation = {
"annos-for-page-1": {
"page_id": "annos-for-page-1",
"page_canvas_container": {},
"page_annotations": [],
"page_canvas": {
"fabric_canvas": {
"version": "5.2.0",
"objects": [{
"type": "rect",
"version": "5.2.0",
"left": 64.38,
"top": 159.99,
"width": 608.27,
"height": 290.3,
"fill": "rgba(255,237,0,0.3)",
"stroke": "rgba(17,153,158,1)",
"erasable": true
}],
"background": "rgba(255, 255, 255, 0)"
},
"width": 994,
"height": 1407,
"fabric_canvas_json": {
"version": "5.2.0",
"objects": [{
"type": "rect",
"version": "5.2.0",
"left": 64.38,
"top": 159.99,
"width": 608.27,
"height": 290.3,
"fill": "rgba(255,237,0,0.3)",
"stroke": "rgba(17,153,158,1)",
"erasable": true,
"id": "1742436474916_1",
"hasControls": true,
"hasBorders": true,
"selectable": true,
"lockMovementX": false,
"lockMovementY": false,
"member_id": "elasticpdf_id",
"member_name": "elasticpdf",
"my_type": "rectangle",
"comment": "添加批注",
"backup_opacity": 1,
"lockRotation": false
}],
"background": "rgba(255, 255, 255, 0)"
}
}
}
}
return JSON.stringify(old_annotation);
}
③ 导出 PDF 文件
将批注合并到批注文件并导出批注后 PDF 文档 base64 数据,可以直接入库保存。
// export edited pdf data
// 导出批注编辑后pdf数据
function getPDFData() {
elasticpdf_viewer.postMessage({
"source": "test-elasticpdf",
"function_name": "getPDFData",
"content": ""
}, '*');
}
④ 切换和打开文档
打开在线文档,其中文件服务器或站点需要允许 CORS 跨域
,否则加载文档会失败。
// You can change test_pdf with any online pdf url
// The file server needs to be configured to allow cross-domain
// 切换打开的文档,可以把 test_pdf 换成任意在线pdf链接
// 文件服务器需要配置允许跨域
function changeFile() {
var test_pdf = 'https://mozilla.github.io/pdf.js/web/compressed.tracemonkey-pldi-09.pdf';
elasticpdf_viewer.postMessage({
"source": "test-elasticpdf",
"function_name": "openFile",
"content": test_pdf
}, '*');
}
⑤ 设置用户信息
设置插件内当前操作用户的 ID 和用户名,这些信息会被记录到每个批注中,后续可以用于做权限差异设置,例如是否允许当前用户操作他人批注。
// set member info including id and name
// 设置用户的 id 和 name
function setMember(id) {
var this_member = {
'id': 'test-id',
'name': 'test-name',
};
elasticpdf_viewer.postMessage({
"source": "test-elasticpdf",
"function_name": "setMember",
"content": this_member
}, '*');
}
⑥ 清空批注数据
将当前文档对应的操作批注完全清空。
// clear all annotations
// 清空批注
function clearAnnotation() {
elasticpdf_viewer.postMessage({
"source": "test-elasticpdf",
"function_name": "clearFileAnnotation",
"content": ""
}, '*');
}
总结
至此,elasticpdf 在线测试版集成于 Vue 项目并调用数据业务 API 的代码介绍完毕,测试代码文件已上传至 Github(网址:https://github.com/ElasticPDF/Vue-use-pdf.js-elasticpdf),欢迎联系我们咨询和获取 Key。
温馨提示:本文首发于 https://www.elasticpdf.com ,转载请注明出处:https://www.elasticpdf.com/blog/vue-pdf-annotation-plugin-lib...