5种开源PDF解析方案(JS/Node.js)及实战教程

hi, 大家好, 我是徐小夕.

最近一直在迭代 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

基础用法:

js 复制代码
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(轻量级文本提取)

基于pdf.js的封装库,简化文本提取流程,适合快速获取纯文本内容。安装:

复制代码
npm install pdf-parse

基础使用:

js 复制代码
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编辑、表单填写、合并/拆分文件,功能强大但文本提取较弱。基本使用介绍:

ini 复制代码
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(结构化数据提取)

将PDF转换为JSON格式,保留文本位置、字体等元数据。基本使用方法:

ini 复制代码
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处理库,适合高性能场景,但学习曲线较高。基本使用:

js 复制代码
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 已支持ReactVue 版本, 底层采用插件化设计, 企业研发人员可以低成本集成到内部产品或系统.

我们可以使用它来实现类似腾讯文档 , 飞书文档 , ones 等项目管理平台, 下面是我们基于flowmix/docx 实现的一个轻文档平台的编辑器界面, 大家可以参考一下:

后续规划

最近我们做了一款文档管理类Saas系统, 底层基于Flowmix/Docx 多模态文档引擎, 这里简单和大家分享一下:

大家可以使用它来管理自己的内容知识文档, 同时能一键生成自己的专属知识库.

文档地址: orange.turntip.cn/doc

每个月我们都会根据用户的需求和规划的迭代计划持续迭代, 大家可以在留言区反馈评论.

相关推荐
JeffongTan5 小时前
在LWC中镶嵌VF Page获取用户IP
前端·javascript·salesforce
不cong明的亚子8 小时前
web live多屏互动平台
javascript·经验分享·音视频
陆枫Larry8 小时前
Astro 是什么
前端
是立不是利9 小时前
写给设计师的 CSS 博客美学指南
前端·css
dsyyyyy110110 小时前
JS复习,难点,易错点总结
开发语言·javascript·ecmascript
默_笙10 小时前
🏝 Docker 就是"房地产开发":从施工图纸到小区物业的容器化指南
前端·javascript
计算机魔术师10 小时前
Rohan Paul 谈用时间跨度衡量智能体能力,并引用 OpenAI 自动化研究实习生里程碑
前端
峰向AI10 小时前
告别 API 费用! 这个开源工具让你的 AI 助手在本地运行
github
kyriewen10 小时前
我手写了个极简版 React Router——才搞懂 v6 为什么砍了这么多 API
前端·javascript·程序员
a11177610 小时前
Shirone 二次元博客主题 开源
前端·开源