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");
Copyright © 2026