JavaScript实现word转png的示例代码
作者:前端_老Q
这篇文章主要为大家详细介绍了如何使用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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!