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-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
- 프로젝트