大家好,很高兴再次见面。 我是《中级后端进阶》,带你关注后端前沿,深入后端底层技术。 让我们共同进步。 也欢迎您关注、点赞、收藏、转发,您的支持是我不断创作的动力。
明天给大家带来的主题是几个流行的后端word文件处理开源库,希望大家还能使用。 废话不多说,我们直接进入正题吧!
1.Docx1.1即Docx
Docx 是一个开源 JavaScript API,它提供了在 JavaScript 应用程序中轻松生成和管理 WordDOCX 文件的能力。 该库支持在 Node.js 和浏览器环境中工作,同时极其稳定且易于使用。 只需几行代码,开发人员就可以创建和操作 Word 文档,而无需任何外部依赖。
DocxAPI支持与处理Word文档相关的几个重要功能,例如:创建Word文档、修改DOCX文件、向Word文件添加段落、添加和管理脚注和页码、插入和编辑表格、项目符号和编号支持、目录创建,设置文档行距,设置页面大小,文本对齐方式,管理字体和字体大小,创建文档部分等等。
Docx 的典型特征包括:
目前,Docx 通过 MIT 合约在 Github 上开源。 它拥有超过 3.3k 个 star、0.4k 个 fork、2.8k 个项目依赖项、平均每周 NPM 下载量为 83k,以及 80 多个代码贡献者。 是一个值得关注的优质后端。 开源项目。
1.2Docx简单易用
import * as fs from "fs";
import { Document, Packer, Paragraph, TextRun } from "docx";
// 文档包含节,每个文档可以有多个节
// 这个简单的例子只包含一个部分
const doc = new Document({
sections: [
{
properties: {},
children: [
new Paragraph({
children: [
new TextRun("Hello World"),
new TextRun({
text: "Foo Bar",
bold: true,
}),
new TextRun({
text: "tGithub is the best",
bold: true,
}),
],
}),
],
},
],
});
// 用于将文件导出为 .docx 文件
Packer.toBuffer(doc).then((buffer) => {
fs.writeFileSync("My Document.docx", buffer);
});
//名为“My Document.docx”的文件将位于文件系统中。
2.docxtemplater2.1即docxtemplater
docxtemplater 是一个工具库,用于从模板(Word、Powerpoint 和 Excel 文档)、Node.js、浏览器和命令行/演示文稿生成 docx、pptx 和 xlsx。 它可以用数据替换{占位符},还支持循环和条件,非程序员(例如:客户)可以编辑模板。
由于多年来修补了许多错误,docxtemplater 非常强大,但测试和代码质量很高。 开发者还可以通过以下付费模块逐步完善自己的功能:
目前docxtemplater通过Github上的MIT合约开源。 它拥有超过 2.5k 个 star,0.33k 个 fork,3k 个项目依赖项,平均每周 NPM 下载量超过 60k+,以及 30+ 代码贡献者。 是一款值得关注的优质后端开源。 项目。
2.2 使用docxtemplater
以下代码是在Node.js环境下使用docxtemplater:
const PizZip = require("pizzip");
const Docxtemplater = require("docxtemplater");
const fs = require("fs");
const path = require("path");
// 二进制文件读取docx文件
const content = fs.readFileSync(
path.resolve(__dirname, "input.docx"),
"binary"
);
const zip = new PizZip(content);
const doc = new Docxtemplater(zip, {
paragraphLoop: true,
linebreaks: true,
});
// 渲染文档(将 {first_name} 替换为 John,将 {last_name} 替换为 Doe)
doc.render({
first_name: "John",
last_name: "Doe",
phone: "0652455478",
description: "New Website",
});
const buf = doc.getZip().generate({
type: "nodebuffer",
// 压缩:DEFLATE 添加压缩步骤。
// 对于 50MB 的输出文档,预计需要 500ms 的额外 CPU 时间
compression: "DEFLATE",
});
// buf 是一个nodejs Buffer,你可以将它写入
// 文件或重新发送,例如使用res.send
fs.writeFileSync(path.resolve(__dirname, "output.docx"), buf);
运行此代码后,您将在同一文件夹中获得一个名为“output.docx”的文件,其中 {first_name} 替换为“John”,{last_name} 标记替换为“Doe”。
在浏览器环境中,与React、Angular、Vue、Next.js集成的示例可以参考文末的信息,这里不再过多展开。
3.Docx-templates3.1 Docx-templates是什么
在 Node.js 和浏览器环境中创建基于模板的 docx 报告。
Docx 模板具有以下特征:
目前Docx-templates在Github上通过MIT合约开源,拥有0.7k star,是一个值得关注的后端开源项目。
3.2 使用 Docx 模板
这是一个简单的示例,其中报表数据直接作为对象注入:
import createReport from "docx-templates";
import fs from "fs";
const template = fs.readFileSync("myTemplate.docx");
const buffer = await createReport({
template,
data: {
name: "John",
surname: "Appleseed",
},
});
fs.writeFileSync("report.docx", buffer);
开发人员还可以在 Deno 中使用 docx 模板。 只需遵循浏览器手册并导出 polyfilleddocx-templates 包,例如从 unpkg 导出:
// @deno-types="https://unpkg.com/docx-templates/lib/bundled.d.ts"
import { createReport } from "https://unpkg.com/docx-templates/lib/browser.js";
需要注意的是,开发者必须设置 noSandbox: true 或者使用 runJs 选项自带沙箱。 除了 Deno 环境之外,Docx-templates 还支持在浏览器环境中使用。 本文不会展开太多,大家可以在文末的参考资料中自行阅读。
4.其他公共库 4.1docxjs
docxjs 是一个 Docx 渲染库webpack官方示例,用于将 DOCX 渲染为 HTML。 目前它通过 Github 上的 Apache-2.0 合约开源。 是一个值得关注的后端开源项目。
docxjs的使用非常简单。 例如,下面是在浏览器中运行docxjs的示例:
var docData = ;
docx.renderAsync(docData, document.getElementById("container"))
.then(x => console.log("docx: finished"));
...
...
4.2 文档x4js
docx4js 是一个 javascript docx/pptx/xlsx 文件解析器,但不幸的是目前仅支持 docx。
为了性能的考虑,docx4js的实现并没有保留解析后的结构,只是遍历docx内容webpack官方示例,识别docx模型,然后一一调用访问者。 无论内容还是风格,都有相同的策略,并且这些技术可以用更少的显存做更多的事情。
docx中有很多信息,但客户端应用程序一般只关心其中的一部分,例如:仅内容、仅结构、某些样式或个别属性。 客户端应用程序只能按类型处理特殊短语模型。
使用docx4js也很简单,比如下面的例子:
import docx4js from "docx4js"
docx4js.load("~/test.docx").then(docx=>{
// 可以通过给出一个函数将 docx 渲染到任何东西(反应元素、树、dom 等)
docx.render(function createElement(type,props,children{
return {type,props,children}
})
//或使用事件处理程序进行更灵活的控制
const ModelHandler=require("docx4js/lib/openxml/docx/model-handler").default
class MyModelhandler extends ModelHandler{
onp({type,children,node,...}, node, officeDocument){
}
}
const handler=new MyModelhandler()
handler.on("*",function({type,children,node,...}, node, officeDocument){
console.log("found model:"+type)
})
handler.on("r",function({type,children,node,...}, node, officeDocument){
console.log("found a run")
})
docx.parse(handler)
// 可以更改 docx.officeDocument.content 上的内容,然后保存
docx.officeDocument.content("w\:t").text("hello")
docx.save("~/changed.docx")
})
// 可以创建一个空白的 docx
docx4js.create().then(docx=>{
//做任何你想做的事
docx.save("~/new.docx")
})
5.本文总结
本文主要向大家介绍几个流行的后端word文件处理开源库,希望大家能够使用。 相信通过阅读本文,您会对docx4js、docxjs、Docx-templates、docxtemplater、Docx等有一个初步的了解。
由于篇幅有限,关于docx4js、docxjs、Docx-templates、docxtemplater、Docx等库的使用和特点的文章并不多。 如果您有兴趣,可以到我的主页继续阅读。 同时,文末提供了参考资料。 有大量优秀的文档可供学习。 最后,欢迎大家点赞、评论、转发、收藏。 您的支持是我不断创作的动力。
参考
发表评论