如何将带有npm'docx'包的图像添加到word文档中?

zql*_*imy 5 javascript docx node.js reactjs

我发现这个npm包docx可以帮助用javascript生成word文档文件: https: //github.com/dolanmiu/docx

我想向我的图像添加图像doc,但我似乎不知道如何添加或发生了什么。我在这方面花了相当多的时间,但对于像我这样的菜鸟来说,文档还不够全面。

这是我尝试过的:

尝试#1:

import React, { useState } from "react";
import * as fs from "fs";
import moment from "moment";
import { Document, Packer, Paragraph, Media } from "docx";
import { saveAs } from "file-saver";
const GenerateDoc = () => {
    const doc = new Document();
    const logo = Media.addImage(doc, fs.readFileSync("myImage.png"), 200, 200); // ERROR HERE: "fs.readFileSync is not a function
    doc.addSection({children: [new Paragraph(logo)]});
    const download = () => {
        // download function...
    };
    return (
        <div>
            <button onClick={() => {download()}}>Generate</button>
        </div>
    );
};
export default GenerateDoc;
Run Code Online (Sandbox Code Playgroud)

输出 #1:类型错误:fs__WEBPACK_IMPORTED_MODULE_2__.readFileSync 不是函数

尝试#2:

import React, { useState } from "react";
import moment from "moment";
import { Document, Packer, Paragraph, Media } from "docx";
import { saveAs } from "file-saver";
const GenerateDoc = () => {
    const doc = new Document();
    const logo = doc.createImage("myImage.png"); // ERROR HERE: doc.createImage is not a function
    doc.addSection({children: [new Paragraph(logo)]});
    const download = () => {
        // download function...
    };
    return (
        <div>
            <button onClick={() => {download()}}>Generate</button>
        </div>
    );
};
export default GenerateDoc;
Run Code Online (Sandbox Code Playgroud)

输出#2:类型错误:doc.createImage 不是函数

什么在起作用:

import React, { useState } from "react";
import moment from "moment";
import { Document, Packer, Paragraph, Media } from "docx";
import { saveAs } from "file-saver";
const GenerateDoc = () => {
    const doc = new Document();
    const logo = Media.addImage(doc); // returns a blank image in the word document since I didn't specify a file.
    doc.addSection({
        children: [new Paragraph(logo)]
    });
    const download = () => {
        // download function...
    };
    return (
        <div>
            <button onClick={() => {download()}}>Generate</button>
        </div>
    );
};
export default GenerateDoc;
Run Code Online (Sandbox Code Playgroud)

以下是文档:
- https://docx.js.org/#/usage/images
- https://runkit.com/dolanmiu/docx-demo5
- https://github.com/dolanmiu/docx/wiki/图片

任何帮助是极大的赞赏!!

提前致谢!!

编辑:

尝试#3:

import React, { useState } from "react";
import moment from "moment";
import { Document, Packer, Paragraph, Media } from "docx";
import { saveAs } from "file-saver";
const GenerateDoc = () => {
    const doc = new Document();
    const logo = Media.addImage(doc, '../myImage.png'); // ERROR: InvalidCharacterError: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.
    doc.addSection({
        children: [new Paragraph(logo)]
    });
    const download = () => {
        // download function...
    };
    return (
        <div>
            <button onClick={() => {download()}}>Generate</button>
        </div>
    );
};
export default GenerateDoc;
Run Code Online (Sandbox Code Playgroud)

输出#3:InvalidCharacterError:无法在“Window”上执行“atob”:要解码的字符串未正确编码。

Dol*_*lan 0

DOCX 作者在这里,

以下是 React 中带有图像的 docx 示例(base64 和来自互联网的 URL 请求):

https://stackblitz.com/edit/react-ts-qdqu7z

  • 从文件加载图像怎么样?在文档中,您使用的 fs 无法再在 React 中导入。有什么建议么?@多兰 (3认同)