harshankur/officeParser
A robust, strictly-typed Node.js and Browser library for parsing office files into a rich Abstract Syntax Tree (AST) and generating high-fidelity output in multiple formats. Parses: docx · pptx · xlsx · odt · odp · ods · pdf · rtf · csv · md · html. Generates: Markdown · HTML · CSV · RTF · PDF · Plain Text · RAG Chunks
概览
officeParser 是一个与 Node 兼容的 库,能够读取许多常见的办公文档格式(如 DOCX、PPTX、XLSX、PDF 等),并将其转换为 严格类型的抽象语法树 (AST)。相同的 AST 随后可以写回多种目标格式——DOCX、ODT、LaTeX、Markdown、HTML、CSV、RTF、PDF、EPUB 等,包括用于检索增强生成 (RAG) 流水线的 RAG-ready chunks。
该项目同时提供 程序化 API(用于 JavaScript/TypeScript 代码)以及 CLI (npx officeparser …),以便在命令行进行快速转换。浏览器端的可视化工具让您可以上传文件、查看生成的 AST、调整选项并即时预览输出结果。
主要功能
| 功能 | 说明 |
|---|---|
| 多格式解析 | 读取 DOCX、PPTX、XLSX、ODT/ODP/ODS/ODG、PDF、RTF、CSV、Markdown、HTML、EPUB、LaTeX(包含 Overleaf zip 项目)并产生统一的 AST。 |
| 多格式生成 | 从 AST 中,您可以输出 DOCX、ODT、LaTeX、Markdown、HTML、CSV、RTF、PDF(通过 pdf-lib 或 Puppeteer 原生支持)、EPUB、纯文本或 RAG-chunks。 |
| 原生 PDF 引擎 | 无需无头浏览器——pdf-lib 可直接在 Node 或浏览器中创建 PDF 字节。 |
| 密码处理 | 单一 password/onPassword 选项适用于加密的 PDF、OOXML 和 ODF 文件。 |
| 模板 / 邮件合并 | OfficeTemplate.render 可填充 DOCX/ODT 模板中的 {{placeholders}},并支持批量渲染。 |
| OCR 集成 | 可选的基于 Tesseract 的 OCR,用于提取的图像(适用于扫描的 PDF 或 PPTX 幻灯片)。 |
| RAG 分块 | 内置的 chunks 输出可将文档分割为适合检索的片段,并可配置大小与重叠度。 |
| 细致配置 | 数百个 CLI 标志 / TypeScript 选项可控制标题检测、列布局、颜色提取、图像处理、LaTeX 文档类等。 |
| 浏览器可视化工具 | 交互式网页 UI (/officeParser/) 显示 AST 树状结构,让您编辑配置并即时预览生成的文档。 |
| 类型安全 API | 使用 TypeScript 编写;AST 与所有公开函数皆有严格的类型定义。 |
典型使用场景
| 场景 | 如何使用 officeParser |
|---|---|
| 提取纯文本以进行索引 | await officeParser.parseOffice('file.pdf'); 然后 await ast.to('text'); – 文本会保留原始布局(列、表格、标题)。 |
| 将 Word 文档转换为 Markdown | CLI: npx officeparser report.docx --to=md --output=report.md 或程序化: await OfficeConverter.convert('report.docx', 'md'); |
| 无需无头浏览器从 DOCX 生成 PDF | 设置 pdfConfig.engine: 'native' 并调用 ast.to('pdf')。 |
| 创建邮件合并批次 | 加载 DOCX 模板,调用 OfficeTemplate.render([{name:'Alice'}, {name:'Bob'}]) 以产生单独文档。 |
| 将文档输入至 RAG 流水线 | npx officeparser big_report.pdf --to=chunks 或 OfficeConverter.convert(file, 'chunks', {chunkingConfig:{maxTokens:500}})。 |
| 处理扫描的 PDF | 启用 --ocr(或在代码中设置 ocr: true)并搭配 extractAttachments – OCR 会在每个提取的图像上运行,识别出的文本将成为 AST 的一部分。 |
入门指南
# 安装库
npm i officeparser # 需要 Node >= 22.13
快速程序化示例 (Node)
import { OfficeParser, OfficeConverter } from 'officeparser';
// 解析 DOCX 文件
const ast = await OfficeParser.parseOffice('proposal.docx', {
extractAttachments: true,
ocr: true, // 对任何嵌入图像运行 OCR
});
// 将相同文档转换为 HTML
const html = await ast.to('html');
console.log(html.value);
// 或进行一步转换
await OfficeConverter.convert('proposal.docx', 'pdf', {
pdfConfig: { engine: 'native' },
output: 'proposal.pdf',
});
CLI 单行指令
npx officeparser presentation.pptx \
--ocr --extractAttachments \
--to=html --output=preview.html
限制与已知问题
- 非常大的 PDF 可能会达到独立
pdf.js进程默认的内存限制;如有需要,请增加pdfParserConfig.processMemoryMb。 - 文本格式(MD、HTML、CSV、TEX)在作为原始缓冲区提供时需要明确的
fileType,因为它们缺乏魔术字节。 - 原生 PDF 引擎不支持高级的基于 CSS 的布局——对于复杂样式,请改用
html(Puppeteer) 引擎。 - OCR 非常消耗 CPU,在大型文档上可能会变慢;可通过
AbortSignal取消。
许可
MIT – 可免费进行商业与个人使用。
officeParser 旨在成为开发人员的一站式解决方案,用于摄取、转换或生成办公风格的文档,特别是当这些文档需要输入至下游的 AI 或 RAG 流水线时。
相关
- 项目
- 项目
- Dispatch
- Dispatch
- 项目