JavaScript实现word转png的示例代码
由于 java
后端的 itext
库是收费版,公司安全部门发出安全警告,要求整改。
所以采用前端实现 word
文档转图片功能。
一、需求
上传 docx
文件,并生成 png
图片作为缩略图
二、分析
前端无法直接把 docx
文档转成图片格式
三、解决方案
既然直接转无法实现,那就采用迂回战术
- 先转成
html
(用到库 docx-preview ) - 再将
html
转成canvas
(用到库 html2canvas ) - 最后将
canvas
转成png
四、实现步骤
1.将 docx
文件转成 html
格式,并插入目标节点中
安装 docx-preview 依赖: pnpm add docx-preview --save
import { useEffect } from 'react'; import * as docx from 'docx-preview'; export default ({ file }) => { useEffect(() => { // file 为上传好的 docx 格式文件 docx2Html(file); }, [file]); /** * @description: docx 文件转 html * @param {*} file: docx 格式文件 * @return {*} */ const docx2Html = file => { if (!file) { return; } // 只处理 docx 文件 const suffix = file.name?.substr(file.name.lastIndexOf('.') + 1).toLowerCase(); if (suffix !== 'docx') { return; } const htmlContentDom = document.querySelector('#htmlContent'); // 生成 html 后挂载的 dom 节点 const docxOptions = Object.assign(docx.defaultOptions, { debug: true, experimental: true, }); docx.renderAsync(file, htmlContentDom, null, docxOptions).then(() => { console.log('docx 转 html 完成'); }); }; return <div id='htmlContent' />; };
此时,在 id
为 htmlContent
的节点下,就可以看到转换后的 html
内容了
2.将 html
转成 canvas
安装 html2canvas 依赖: pnpm add html2canvas --save
import html2canvas from 'html2canvas'; /** * @description: dom 元素转为图片 * @return {*} */ const handleDom2Img = async () => { const htmlContentDom = document.querySelector('#htmlContent'); // 生成 html 后挂载的 dom 节点 // 获取刚刚生成的 dom 元素 const htmlContent = htmlContentDom.querySelectorAll('.docx-wrapper>section')[0]; // 需要生成图片的 html 内容 // 创建 canvas 元素 const canvasDom = document.createElement('canvas'); // 获取 dom 宽高 const w = parseInt(window.getComputedStyle(htmlContent).width, 10); // const h = parseInt(window.getComputedStyle(htmlContent).height, 10); // 设定 canvas 元素属性宽高为 DOM 节点宽高 * 像素比 const scale = window.devicePixelRatio; // 缩放比例 canvasDom.width = w * scale; // 取文档宽度 canvasDom.height = w * scale; // 缩略图是正方形,所以高度跟宽度保持一致 // 按比例增加分辨率,将绘制内容放大对应比例 const canvas = await html2canvas(htmlContent, { canvas: canvasDom, scale, useCORS: true, }); return canvas; };
3.将生成好的 canvas
转成 png
文件,并下载
// 将 canvas 转为 base64 图片 const base64Str = canvas.toDataURL(); // 下载图片 const imgName = `图片_${new Date().valueOf()}`; const aElement = document.createElement('a'); aElement.href = base64Str; aElement.download = `${imgName}.png`; document.body.appendChild(aElement); aElement.click(); document.body.removeChild(aElement); window.URL.revokeObjectURL(base64Str);
到此这篇关于JavaScript实现word转png的示例代码的文章就介绍到这了,更多相关JavaScript word转png内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
uniapp添加操作日志的方法(uniapp、日志、文件、html5+)
近期一直在写微信小程序,有一个问题一直没有解决,就是在测试环境中调试代码会打印很多日志,方便看到问题所在,这篇文章主要给大家介绍了关于uniapp添加操作日志(uniapp、日志、文件、html5+)的相关资料,需要的朋友可以参考下2023-11-11JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
这篇文章主要介绍了JavaScript(js)处理的HTML事件、键盘事件、鼠标事件,结合实例形式分析了JavaScript针对HTML事件、键盘事件及鼠标事件的简单处理方法,需要的朋友可以参考下2019-11-11javascript document.referrer 用法
document对象的referrer属性,返回导航到当前网页的超链接所在网页的URL。2009-04-04
最新评论