nodejs替换docx文件{{x}}处标记的内容

nodejs替换docx文件{{x}}处标记的内容

替换前
替换前
替换后
替换后
安装依赖

pnpm add compressing rimraf

代码
index.js

const fs = require('fs')
const path = require('path')
const compressing = require('compressing')
const rimrif = require('rimraf')

// 要替换内容的模板
const inputDocx = 'cs.docx'
// 替换完成的docx文件
const outputDocx = 'dd.docx'
// {{xx}}处要替换的内容
const replaceData = {
    name: '替换name处的内容',
    age: '替换age处的内容',
}

// 替换方法 
function replaceDocx(inputDocxName, outputDocxName, options) {

    // 解压出来的临时目录
    const tempDocxName = inputDocxName + Math.random()
    // 要替换的xml文件位置
    const tempDocxXMLName = `${tempDocxName}/word/document.xml`

    // 压缩文件夹为文件
    const dir_to_docx = (inputName, outputName) => {
        // 创建压缩流
        const zipStream = new compressing.zip.Stream()
        // 写出流
        const outStream = fs.createWriteStream(outputName)
        fs.readdir(inputName, null, (err, files) => {
            if (!err) {
                files.map(file => path.join(__dirname, inputName, file))
                    .forEach(file => {
                        zipStream.addEntry(file)
                    })
            }
        })
        // 写入文件内容
        zipStream.pipe(outStream)
            .on('close', () => {
                // 打包完成后删除临时目录
                rimrif(tempDocxName, (err) => {
                    if (err) throw err
                })
            })
    }

    // 替换word/document.xml文件中{{xx}}处的内容
    const replaceXML = (data, text) => {
        Object.keys(data).forEach(key => {
            text = text.replaceAll(`{{${key}}}`, data[key])
        })
        return text
    }

    // 解压docx文件替换内容重新打包成docx文件
    compressing.zip.uncompress(inputDocxName, tempDocxName)
        .then(() => {
            // 读写要替换内容的xml文件
            fs.readFile(tempDocxXMLName, null, (err, data) => {
                if (!err) {
                    let text = data.toString()
                    text = replaceXML(options, text)
                    fs.writeFile(tempDocxXMLName, text, (err) => {
                        if (!err) {
                            dir_to_docx(tempDocxName, outputDocxName)
                        } else {
                            throw err
                        }
                    })
                } else {
                    throw err
                }
            })
        }).catch(err => {
            throw err
        })
}
// 替换内容
replaceDocx(inputDocx, outputDocx, replaceData)
### 回答1: 在 Node.js 中可以使用 `fs` 模块来操作文件。其中 `fs.appendFile()` 方法可以用来在文件末尾添加内容。 该方法接受三个参数: - 第一个参数是文件的路径 - 第二个参数是要添加的内容 - 第三个参数是回调函数,当写入完成时调用。 示例代码如下: ``` const fs = require('fs'); const filepath = 'path/to/file.txt'; const content = 'This is the content to be appended.'; fs.appendFile(filepath, content, (err) => { if (err) throw err; console.log('Content appended successfully!'); }); ``` 需要注意的是,如果要添加的文件不存在,则会自动创建这个文件,如果文件存在,则会在原本的内容后添加新的内容。 ### 回答2: 在Node.js中,要在原文件末尾添加内容,需要使用内置的fs模块中的fs.appendFile()方法。 首先,需要先引入fs模块: const fs = require('fs'); 然后,可以使用fs.appendFile()方法来将内容添加到文件的末尾。该方法接受三个参数:文件路径、要添加的内容和一个回调函数。 fs.appendFile('文件路径', '要添加的内容', function(err) { if (err) throw err; console.log('内容已被添加到文件末尾'); }); 在代码中,将'文件路径'替换为要操作的文件的实际路径,将'要添加的内容'替换为要添加到文件末尾的内容。 请注意,fs.appendFile()方法是异步的,当内容成功添加到文件末尾时,会执行回调函数。如果有错误发生,将会抛出异常。 如果想要实现同步添加内容的操作,可以使用fs.appendFileSync()方法,使用方式与fs.appendFile()类似。 这是一个简单的例子,演示了如何使用Node.js在原文件末尾添加内容。你可以根据自己的需求调整代码实现更复杂的操作。 ### 回答3: 在Node.js中,可以使用`fs`模块的`appendFile()`方法在原文件的末尾添加内容。下面是一个使用示例: 首先,需要在代码中引入`fs`模块: ```javascript const fs = require('fs'); ``` 然后,使用`appendFile()`方法将内容添加到文件的末尾。该方法需要传递三个参数:文件路径、要添加的内容和一个回调函数。示例如下: ```javascript const filePath = 'path/to/file.txt'; const content = '这是要添加的内容。'; fs.appendFile(filePath, content, (err) => { if (err) { console.error(err); return; } console.log('内容已成功添加到文件末尾。'); }); ``` 在上述示例中,你需要将`filePath`设置为要操作的文件的路径,将`content`设置为要添加的内容。回调函数中的`err`参数用于理可能出现的错误。 以上就是使用Node.js在原文件末尾添加内容的简单方法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值