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


