- 从后端获取文件流,转化成arraybuffer格式
axios
.post(
'/api/vue/vueEquipmentDetails/devicePic',
params,
{
responseType: 'arraybuffer'
}
)
.then(response => {
this.img1='data:image/png;base64,'+this.ArrayBufferToBase64(response.data)
console.log(this.img1)
})
ArrayBufferToBase64(buffer) {
var binary = '';
var bytes = new Uint8Array(buffer);
for (var len = bytes.byteLength, i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[i]);
}
return window.btoa(binary);
},
- 调用导出方法
import docxtemplater from 'docxtemplater'
import JSZipUtils from 'jszip-utils'
import PizZip from 'pizzip'
import {saveAs} from 'file-saver'
import ImageModule from 'docxtemplater-image-module-free'
exportWord(){
var ImageModule = require('open-docxtemplater-image-module');
let _this = this;
let _that = this;
JSZipUtils.getBinaryContent("/demo.docx",function(error, content) {
if (error) {
throw error;
}
let opts = {}
opts.centered = true;
opts.fileType = "docx";
opts.getImage = function(chartId){
console.log(chartId)
return _this.base64DataURLToArrayBuffer(chartId);
}
opts.getSize = function(){
return [60,30]
}
let imageModule = new ImageModule(opts);
let zip = new PizZip(content);
let doc = new docxtemplater();
doc.attachModule(imageModule);
doc.loadZip(zip);
doc.setData({
image:_this.img1
});
try {
doc.render();
} catch (error) {
let e = {
message: error.message,
name: error.name,
stack: error.stack,
properties: error.properties
};
throw error;
}
let out = doc.getZip().generate({
type: "blob",
mimeType:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"
});
saveAs(out, "word文档名称.docx");
});
},
base64DataURLToArrayBuffer(dataURL) {
const base64Regex = /^data:image\/(png|jpg|svg|svg\+xml);base64,/;
if (!base64Regex.test(dataURL)) {
return false;
}
const stringBase64 = dataURL.replace(base64Regex, "");
let binaryString;
if (typeof window !== "undefined") {
binaryString = window.atob(stringBase64);
} else {
binaryString = new Buffer(stringBase64, "base64").toString("binary");
}
const len = binaryString.length;
const bytes = new Uint8Array(len);
for (let i = 0; i < len; i++) {
const ascii = binaryString.charCodeAt(i);
bytes[i] = ascii;
}
return bytes.buffer;
},