五種開源PDF解析方案(JS/Node.js)及實戰教程
最近一直在迭代 flowmix/docx 多模態文檔編輯器,其中涉及到文件解析相關的功能實現,比如PDF解析,Docx解析,接下來我就和大家分享5種解析PDF文件的方案,并提供不同方案的對比和技術選型分析,幫助大家更好的實現web端文檔解析能力。
圖片
5種開源PDF解析方案(JS/Node.js)及實戰教程
PDF作為最常見的文檔格式之一,解析其內容(如文本、表格、圖片)是開發者常遇到的挑戰。本文將介紹 5種開源的JavaScript/Node.js方案,并提供從安裝到實戰的完整教程,助大家快速選擇適合的工具!
一、pdf.js(Mozilla官方出品)
圖片
Mozilla開發的PDF渲染與解析庫,支持瀏覽器和Node.js環境,適合提取文本和渲染頁面。
安裝:
npm install pdfjs-dist
基礎用法:
const pdfjsLib = require('pdfjs-dist');
async function parsePDF(filePath) {
const loadingTask = pdfjsLib.getDocument(filePath);
const pdf = await loadingTask.promise;
for (let pageNum = 1; pageNum <= pdf.numPages; pageNum++) {
const page = await pdf.getPage(pageNum);
const content = await page.getTextContent();
const text = content.items.map(item => item.str).join(' ');
console.log(`第${pageNum}頁文本:`, text);
}
}
parsePDF('example.pdf');
應用場景:
- 網頁端PDF預覽
- 高精度文本提取(支持復雜布局)
二、pdf-parse(輕量級文本提?。?/span>
圖片
基于pdf.js的封裝庫,簡化文本提取流程,適合快速獲取純文本內容。
安裝:
npm install pdf-parse
基礎使用:
const fs = require('fs');
const pdfParse = require('pdf-parse');
async function extractText() {
const dataBuffer = fs.readFileSync('example.pdf');
const { text } = await pdfParse(dataBuffer);
console.log('PDF全文:', text);
}
extractText();
應用場景:
- 快速提取純文本(如日志分析)
- 無需處理復雜格式的場景
三、pdf-lib(編輯與創建PDF)
支持PDF編輯、表單填寫、合并/拆分文件,功能強大但文本提取較弱。
基本使用介紹:
const { PDFDocument } = require('pdf-lib');
const fs = require('fs');
async function editPDF() {
const pdfBytes = fs.readFileSync('example.pdf');
const pdfDoc = await PDFDocument.load(pdfBytes);
const page = pdfDoc.getPage(0);
page.drawText('Hello PDF-Lib!', { x: 50, y: 500 });
const modifiedPdf = await pdfDoc.save();
fs.writeFileSync('modified.pdf', modifiedPdf);
}
editPDF();
應用場景:
- 動態生成PDF(如報告、合同)
- 修改現有PDF內容
四、pdf2json(結構化數據提?。?/span>
將PDF轉換為JSON格式,保留文本位置、字體等元數據。
基本使用方法:
const fs = require('fs');
const PDFParser = require('pdf2json');
const pdfParser = new PDFParser();
pdfParser.on('pdfParser_dataReady', (data) => {
fs.writeFileSync('output.json', JSON.stringify(data));
});
pdfParser.loadPDF('example.pdf');
應用場景:
- 需要分析文本位置(如表格識別)
- 數據挖掘與結構化處理
五、node-hummus(底層操作PDF)
基于C++的PDF處理庫,適合高性能場景,但學習曲線較高。
基本使用:
const hummus = require('hummus');
function mergePDFs() {
const pdfWriter = hummus.createWriter('merged.pdf');
const firstPDF = new hummus.PDFRStreamForFile('file1.pdf');
pdfWriter.appendPDFPagesFromPDF(firstPDF);
const secondPDF = new hummus.PDFRStreamForFile('file2.pdf');
pdfWriter.appendPDFPagesFromPDF(secondPDF);
pdfWriter.end();
}
mergePDFs();
應用場景:
- 高性能PDF合并/拆分
- 添加水印或頁眉頁腳
方案對比與選型建議
選型建議:
- 僅需提取文本 → pdf-parse
- 需渲染PDF頁面 → pdf.js
- 編輯/生成PDF → pdf-lib
- 高性能處理 → node-hummus(需注意維護狀態)
Flowmix/docx多模態文檔編輯器介紹
Flowmix/docx 是一款開箱即用的多模態文檔解決方案,我們可以在Flowmix/docx中編寫多模態的內容, 如音視頻, 思維導圖,可視化圖表, 原型白板, 業務信息卡片等, 幾乎所有瀏覽器支持的組件形態, 都能低成本封裝成Flowmix/docx的文檔組件. 從而幫助企業構建更加強大文檔知識管理系統.
目前Flowmix/docx已支持React和Vue版本, 底層采用插件化設計, 企業研發人員可以低成本集成到內部產品或系統.
我們可以使用它來實現類似騰訊文檔, 飛書文檔, ones等項目管理平臺, 下面是我們基于flowmix/docx 實現的一個輕文檔平臺的編輯器界面, 大家可以參考一下:
后續規劃
最近我們做了一款文檔管理類Saas系統, 底層基于Flowmix/Docx
多模態文檔引擎, 這里簡單和大家分享一下:
大家可以使用它來管理自己的內容知識文檔, 同時能一鍵生成自己的專屬知識庫. 體驗地址: https://orange.turntip.cn/doc