使用pdfjs-dist获取PDF第4页内容失败,可能的原因是什么?
pdfjs-dist提取PDF内容失败排查方案
以下是你遇到的问题的常见原因和修复方案:
- 异步结果未正确接收
getContent是异步函数,执行后返回的是Promise对象,直接console.log只能看到Promise实例,无法获取实际文本内容,需要通过await或者.then()方法获取执行结果。 - 本地文件读取方式错误
Node环境下pdfjs-dist无法直接识别本地文件的相对路径,需要先将本地PDF文件读取为Uint8Array格式再传入getDocument方法。 - 未配置worker源
新版本pdfjs-dist要求手动指定worker文件路径,未配置的话会触发worker加载失败的报错,Node环境可以直接引入对应worker模块进行配置。 - 页码超出PDF实际页数
getPage的参数从1开始计数,需要确认你读取的PDF文件总页数≥4,否则会触发页码不存在的报错。 - 模块引入路径错误
如果是通过npm官方安装的pdfjs-dist包,不需要修改为pdfjs/es5/build/pdf的引入路径,错误的路径会导致模块导出方法不匹配。
修复后可运行的完整代码
const pdfjs = require('pdfjs-dist'); const pdfjsWorker = require('pdfjs-dist/build/pdf.worker.entry'); const fs = require('fs/promises'); // 配置worker pdfjs.GlobalWorkerOptions.workerSrc = pdfjsWorker; async function getContent(src) { // 读取本地PDF为Uint8Array const pdfData = await fs.readFile(src); const doc = await pdfjs.getDocument({ data: new Uint8Array(pdfData) }).promise; // 可先打印总页数确认页码范围 // console.log('PDF总页数:', doc.numPages); const page = await doc.getPage(4); const textContent = await page.getTextContent(); // 拼接提取到的文本 return textContent.items.map(item => item.str).join(' '); } // 正确接收异步结果 getContent('pdfs/Quantum.pdf').then(content => { console.log('第4页内容:', content); }).catch(err => { console.error('提取失败:', err); });
内容的提问来源于stack exchange,提问作者Vakindu
相关产品推荐
相关产品推荐

