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.js互換の ライブラリ であり、一般的なオフィスドキュメント形式(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チャンクを出力できます。 |
| ネイティブ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ドキュメントクラスなどを制御できます。 |
| ブラウザビジュアライザー | インタラクティブなWeb 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
- プロジェクト