可以实现,思路如下:
先将word文档转换成html在浏览器网页中显示,然后通过dom截屏方式保持为图片即可
完整代码如下:
点击查看全文
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
</head>
<body>
    <div class="container">
        <input id="document" type="file" accept=".doc,.docx" />
        <div class="row" style="width: 100%;">
            <div class="span8">
                <div id="output" class="well"></div>
            </div>
        </div>
    </div>
    <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/mammoth.browser.js"></script>
    <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/html2canvas.js"></script>
    <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/filesaver.js"></script>
    <script type="text/javascript">
        document.getElementById("document")
            .addEventListener("change", readFileInputEventAsArrayBuffer, false);
        function displayResult(result) {
            let html = result.value;
            let newHTML = html.replace(//g, '')
            .replace('<h1>', '<h1 style="text-align: center;">')
            .replace(/<table>/g, '<table style="border-collapse: collapse;">')
            .replace(/<tr>/g, '<tr style="height: 30px;">')
            .replace(/<td>/g, '<td style="border: 1px solid pink;">')
            .replace(/<p>/g, '<p style="text-indent: 2em;">');
            document.getElementById("output").innerHTML = newHTML;
           setTimeout(function(){ exportpng();},1000)//1秒后生成
        }
        function readFileInputEventAsArrayBuffer(event) {
            var file = event.target.files[0];
            var reader = new FileReader();
            reader.onload = function (loadEvent) {
                var arrayBuffer = loadEvent.target.result;//arrayBuffer     
                mammoth.convertToHtml({ arrayBuffer: arrayBuffer })
                    .then(displayResult)
                    .done();
            };
            reader.readAsArrayBuffer(file);
        }
        
        function exportpng(){
             var hiddenArea = document.getElementById('output');
  
 html2canvas(
    hiddenArea,
    {
      allowTaint: true,
      useCORS: true,
   
      width: hiddenArea.offsetWidth,
      height: hiddenArea.offsetHeight }).then(function(canvas) {
        // `canvas` 包含了转换后的图像
        // 将 Canvas 添加到页面或进行其他操作
        document.body.appendChild(canvas);
        // 可以将 Canvas 数据保存为图像文件
        var image = canvas.toDataURL("image/png");
        
        
// 将Base64的字符串转换为二进制数据
var blob = dataURItoBlob(image);
// 使用FileSaver.js的saveAs函数进行下载
saveAs(blob, "word.png");
     
       
    });
        }
        
function dataURItoBlob(dataURI) {
  // convert base64 to raw binary data held in a string
  // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this
  var byteString = atob(dataURI.split(',')[1]);
  // separate out the mime component
  var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]
  // write the bytes of the string to an ArrayBuffer
  var ab = new ArrayBuffer(byteString.length);
  // create a view into the buffer
  var ia = new Uint8Array(ab);
  // set the bytes of the buffer to the correct values
  for (var i = 0; i < byteString.length; i++) {
      ia[i] = byteString.charCodeAt(i);
  }
  // write the ArrayBuffer to a blob, and you're done
  var blob = new Blob([ab], {type: mimeString});
  return blob;
}
    </script>
</body>
</html>					网友回复
- threejs如何做个三维搭积木的游戏?
- three如何实现标记多个起始路过地点位置后选择旅行工具(飞机汽车高铁等),最后三维模拟行驶动画导出mp4?
- ai实时驱动的3d数字人可视频聊天的开源技术有吗
- swoole+phpfpm如何实现不同域名指向不同目录的多租户模式?
- 如何用go替换nginx实现请求phpfpm解析运行php脚本?
- 有没有浏览器离线运行进行各种文档、图片、视频格式转换的开源工具?
- 如何使用go语言搭建一个web防火墙?
- linux如何检测特定网络协议比如http协议中报文是否包含特点关键词并阻止返回给客户?
- 如果在nginx外过滤包含某些关键词的网页并阻止打开?
- 程序员怎么做副业赚钱?



 
				 
			 
			 
				 
			