+
95
-

回答

可以实现,思路如下:

先将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>

网友回复

我知道答案,我要回答