webpack官方示例-只盯着Docx? 这些Word深度处理开源库很受欢迎!

大家好,很高兴再次见面。 我是《中级后端进阶》,带你关注后端前沿,深入后端底层技术。 让我们共同进步。 也欢迎您关注、点赞、收藏、转发,您的支持是我不断创作的动力。

明天给大家带来的主题是几个流行的后端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等库的使用和特点的文章并不多。 如果您有兴趣,可以到我的主页继续阅读。 同时,文末提供了参考资料。 有大量优秀的文档可供学习。 最后,欢迎大家点赞、评论、转发、收藏。 您的支持是我不断创作的动力。

参考