You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:50:39