可以实现,思路如下:
先将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>
网友回复