首页 前端知识 基于Vue2的ofd文件预览

基于Vue2的ofd文件预览

2024-06-10 11:06:28 前端知识 前端哥 518 198 我要收藏

最近项目需要预览 ofd 文件,而且涉及到验章签章的问题,所以上网搜索了一下,有用的内容很少,本来想偷个懒直接用 ofd.js 渲染,结果年后回来 ofd.js 突然用不了了,于是根据 ofd.js 的源码修改了一下自己写了一个 vue2 组件,复制即用。

源码上传了gitee:

ofd-view: vue2编写ofd文件预览组件,由ofd.js修改而来 (gitee.com)

运行截图:

使用这个组件时,需要引入以下依赖:(尽量不要修改版本,可能会导致出现一些奇奇怪怪的问题)

    "@lapo/asn1js": "^1.2.1",
    "jszip": "^3.7.0",
    "jszip-utils": "^0.1.0",
    "ofd-xml-parser": "^0.0.2",
    "js-md5": "^0.7.3",
    "js-sha1": "^0.6.0",
    "jsrsasign": "^10.3.0",
    "sm-crypto": "^0.3.2",
    "web-streams-polyfill": "^3.1.0",
    "element-resize-detector": "^1.2.4",
    "x2js": "^3.4.0"

然后cv以下组件到你的代码里就行

外部通过 props 传入一个变量 activeOfdId,通过监测 activeOfdId 的变化来从 sessionStorage 中读取 ofd 文件的 base64 字符串,因为项目获取文件的接口比较多样,所以这么写最方便,如果你觉得文件存 sessionStorage 中占空间或者获取文件的接口比较少,也可以直接把获取文件的接口写在这里。

 

 

 

主要渲染 ofd 文件的代码就是 parseOfdDocument 和 renderOfd :

    // 渲染ofd
    viewOfd(file, screenWidth) {
      let that = this;
      // 其中ofd传入的file支持本地文件、二进制或者url,screenWidth为屏幕宽度
      parseOfdDocument({
        ofd: file,
        success(res) {
          that.ofdObj = res[0]
          that.pageCount = res[0].pages.length;
          // 输出ofd每页的div
          const contentDiv = document.getElementById('ofdContainer');
          contentDiv.innerHTML = '';
          const divs = renderOfd(screenWidth, res[0])
          that.originalScale = getPageScale();
          that.displayOfdDiv(divs);
        },
        fail(error) {
          console.log(error)
        }
      })
    },

其中 ofd 传入的 file 支持本地文件、二进制或者url

如果后端传过来的是 base64 字符串,咱们通过utils里的方法转一下格式就可以:

// base64转file
export function base64ToFile(base64Str){
  const data = base64Str.replace(/[\n\r]/g, '');
  const raw = window.atob(data);
  const rawLength = raw.length;
  const array = new Uint8Array(new ArrayBuffer(rawLength));
  for (let i = 0; i < rawLength; i++) {
    array[i] = raw.charCodeAt(i) & 0xff
  }
  return new File([array], 'demo.ofd')
}

这里也对签章的内容进行了解析,具体内容看源码吧,ofd.js中也有

 主要代码还是来自于ofd.js,只是对ofd.js进行小部分的修改,感谢原作大佬!官网:

GitHub - DLTech21/ofd.js: OFD板式文件html渲染方案及组件

转载请注明出处或者链接地址:https://www.qianduange.cn//article/11784.html
标签
评论
发布的文章

第一次实验补充

2024-06-18 09:06:14

html5shiv,从入门到深入

2024-05-09 10:05:07

html5基础入门

2024-06-18 09:06:07

HTML5学习简记

2024-06-18 09:06:20

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!