我需要什么文件类型才能使文档中的图像正常工作?

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;
}