我需要什么文件类型才能使文档中的图像正常工作?
What filetype do I need to make image in docs to work?
我使用 docxtemplater 将我的图像放在 docx 文件中,但它总是以错误图像结束
我试过将它作为文件列表、base64、缓冲区发送,但它永远不起作用
这是我的代码,谢谢你。
export const generateDocument = async (data, file, setFile) => {
const opts = {
centered: true,
getImage: function (tagValue, tagName) {
return PizZipUtils.getBinaryContent(data.imageData[0], (error, content) => content);
},
getSize: function (img, tagValue, tagName) {
return [110, 130];
},
};
loadFile(data.logo === "BBS" ? './BBS.docx' : "./PPT.docx", (error, content) => {
if (error) {
throw error;
}
let zip = new PizZip(content);
let doc = new Docxtemplater(zip, {
modules: [new ImageModule(opts)],
paragraphLoop: true,
linebreaks: true
});
doc.setData({...data});
// render the document (replace all occurences of {first_name} by John, {last_name} by Doe, ...)
doc.render();
let out = doc.getZip().generate({
type: "blob",
mimeType: "docxType",
});
saveAs(out, 'Resume.docx');
});
可能还有其他方法,但如果您的 getImage()
函数 returns 和 ArrayBuffer
具有图像数据,则它绝对有效。 Buffer
似乎是 node.js
的一部分。如果你的代码在浏览器中运行,你可以npm install buffer
.
如果你的图片数据是base64编码的,你可以使用这个转换函数:
import { Buffer } from "buffer";
function base64DataURLToArrayBuffer(stringBase64) {
const binaryString = window.atob(stringBase64);
const len = binaryString.length;
const bytes = Buffer.alloc(len, 0);
for (let i = 0; i < len; i += 1) {
const ascii = binaryString.charCodeAt(i);
bytes[i] = ascii;
}
return bytes;
}
我使用 docxtemplater 将我的图像放在 docx 文件中,但它总是以错误图像结束
我试过将它作为文件列表、base64、缓冲区发送,但它永远不起作用
这是我的代码,谢谢你。
export const generateDocument = async (data, file, setFile) => {
const opts = {
centered: true,
getImage: function (tagValue, tagName) {
return PizZipUtils.getBinaryContent(data.imageData[0], (error, content) => content);
},
getSize: function (img, tagValue, tagName) {
return [110, 130];
},
};
loadFile(data.logo === "BBS" ? './BBS.docx' : "./PPT.docx", (error, content) => {
if (error) {
throw error;
}
let zip = new PizZip(content);
let doc = new Docxtemplater(zip, {
modules: [new ImageModule(opts)],
paragraphLoop: true,
linebreaks: true
});
doc.setData({...data});
// render the document (replace all occurences of {first_name} by John, {last_name} by Doe, ...)
doc.render();
let out = doc.getZip().generate({
type: "blob",
mimeType: "docxType",
});
saveAs(out, 'Resume.docx');
});
可能还有其他方法,但如果您的 getImage()
函数 returns 和 ArrayBuffer
具有图像数据,则它绝对有效。 Buffer
似乎是 node.js
的一部分。如果你的代码在浏览器中运行,你可以npm install buffer
.
如果你的图片数据是base64编码的,你可以使用这个转换函数:
import { Buffer } from "buffer";
function base64DataURLToArrayBuffer(stringBase64) {
const binaryString = window.atob(stringBase64);
const len = binaryString.length;
const bytes = Buffer.alloc(len, 0);
for (let i = 0; i < len; i += 1) {
const ascii = binaryString.charCodeAt(i);
bytes[i] = ascii;
}
return bytes;
}