CORE
Parser
使用 ParsedDocument 解析和修改现有的 OOXML 文档
解析器将 .docx 和 .pptx 文件读取为 ParsedDocument,提供键值存储接口来访问和修改 XML 部件。
解析文档
import { readFileSync } from "node:fs";
import { parseDocument } from "@office-open/core";
const data = readFileSync("document.docx");
const doc = parseDocument(data);
ParsedDocument API
读取部件
// 读取 XML 部件为 Element 树
const styles = doc.get("word/styles.xml");
// 读取二进制数据(图片、媒体)
const image = doc.getRaw("word/media/image1.png");
// 检查部件是否存在
doc.has("word/document.xml"); // true
// 列出所有路径
doc.keys(); // ["[Content_Types].xml", "word/document.xml", ...]
doc.keys("word/media/"); // ["word/media/image1.png"]
写入部件
import { Element } from "@office-open/xml";
// 写入 XML 部件
doc.set("word/styles.xml", modifiedStylesElement);
// 写入二进制数据
doc.setRaw("word/media/image2.png", imageBuffer);
删除部件
doc.remove("word/settings.xml"); // 删除成功返回 true
保存
// 序列化回 ZIP 缓冲区
const modified = doc.save();
writeFileSync("modified.docx", modified);
完整示例
import { readFileSync, writeFileSync } from "node:fs";
import { parseDocument } from "@office-open/core";
import { findChild, children } from "@office-open/xml";
const doc = parseDocument(readFileSync("input.docx"));
// 读取文档主体
const documentXml = doc.get("word/document.xml");
// 列出所有媒体文件
const mediaFiles = doc.keys("word/media/");
console.log("媒体文件:", mediaFiles);
// 保存副本
writeFileSync("output.docx", doc.save());
结合 @office-open/xml 使用
将 ParsedDocument 与 @office-open/xml 查询工具结合使用,可以检查和修改 XML 内容:
import { parseDocument } from "@office-open/core";
import { findChild, children, childText } from "@office-open/xml";
const doc = parseDocument(readFileSync("input.docx"));
const body = doc.get("word/document.xml");
// 查找所有段落
const paragraphs = children(body, "w:p");
// 获取第一段文本
const text = childText(paragraphs[0], "w:t");