如何在Node+Express中用PDF.js读取PDF全部页面而非单页?
Node.js + Express 中用 PDF.js 读取PDF全部页面的解决方案
你遇到的问题核心是没有遍历PDF的所有页码——doc.numPages返回的是最后一页的编号,直接用它只会获取最后一页,必须循环从1到doc.numPages逐个加载页面。
以下是可直接复用的实现代码:
1. 安装依赖
npm install pdfjs-dist express
2. 完整实现代码
const express = require('express'); const app = express(); const pdfjsLib = require('pdfjs-dist/legacy/build/pdf'); const fs = require('fs'); // 示例接口:读取指定PDF的所有页面文本 app.get('/extract-pdf-pages', async (req, res) => { try { // 替换为你的PDF文件路径,也可通过req接收上传的文件流 const pdfFilePath = './sample.pdf'; const pdfBuffer = fs.readFileSync(pdfFilePath); const pdfData = new Uint8Array(pdfBuffer); // 加载PDF文档 const pdfDoc = await pdfjsLib.getDocument({ data: pdfData }).promise; const totalPages = pdfDoc.numPages; const pageContents = []; // 遍历每一页(PDF页码从1开始) for (let pageNum = 1; pageNum <= totalPages; pageNum++) { const page = await pdfDoc.getPage(pageNum); // 获取页面文本内容 const textContent = await page.getTextContent(); const pageText = textContent.items.map(item => item.str).join(' '); pageContents.push({ pageNumber: pageNum, text: pageText }); // 清理页面资源,避免内存泄漏 page.cleanup(); } res.status(200).json({ totalPages, pages: pageContents }); } catch (err) { res.status(500).json({ error: err.message }); } }); app.listen(3000, () => { console.log('Server running on http://localhost:3000'); });
关键注意事项
- 遍历页码范围:PDF的页码从1开始,必须循环
1到totalPages的所有数值,不能只传入totalPages - 异步处理:用
async/await确保每一页加载完成后再处理下一页,避免异步回调导致的顺序混乱 - 资源清理:调用
page.cleanup()释放每页的内存资源,尤其处理大PDF时更重要 - 自定义需求:如果需要的是页面渲染数据(而非文本),可替换
getTextContent()为页面视图获取逻辑,比如getViewport()
内容的提问来源于stack exchange,提问作者Kike gonzalez
相关产品推荐
相关产品推荐

