如何使用JavaScript提取PDF内容?pdf.js调用报错求助
解决PDF内容提取及pdf.js调用报错问题
问题描述
尝试多种方法提取PDF内容均失败,使用pdf.js时出现报错,调用代码如下:
var loadingTask = window.pdfjsLib.getDocument('dummy.pdf'); loadingTask.promise.then(function(pdf) { console.log(pdf) });
控制台报错:Can not read property of undefined 'getDocument'
解决pdf.js报错及提取内容的方法
1. 修复pdf.js的加载问题
报错核心是window.pdfjsLib未定义,说明pdf.js库没正确加载,按以下步骤排查:
- 确保正确引入库文件:如果是浏览器环境,需先引入pdf.js和对应的worker脚本,注意文件路径要正确,比如:
若用模块化开发(比如Webpack/Vite),需先安装依赖:<script src="./pdf.js"></script> <script src="./pdf.worker.js"></script>
然后通过import引入并配置worker路径:npm install pdfjs-distimport * as pdfjsLib from 'pdfjs-dist'; pdfjsLib.GlobalWorkerOptions.workerSrc = 'pdf.worker.js'; - 确保代码在库加载后执行:浏览器环境下,把代码放在脚本引入之后,或者包裹在
DOMContentLoaded事件里,避免库未加载就执行代码:document.addEventListener('DOMContentLoaded', function() { var loadingTask = window.pdfjsLib.getDocument('dummy.pdf'); loadingTask.promise.then(function(pdf) { console.log('PDF加载成功:', pdf); }); });
2. 用pdf.js提取PDF文本的完整示例
加载PDF后,遍历页面提取文本:
document.addEventListener('DOMContentLoaded', async function() { try { const pdf = await window.pdfjsLib.getDocument('dummy.pdf').promise; let fullText = ''; // 遍历所有页面 for (let pageNum = 1; pageNum <= pdf.numPages; pageNum++) { const page = await pdf.getPage(pageNum); const textContent = await page.getTextContent(); // 拼接每页文本 const pageText = textContent.items.map(item => item.str).join(' '); fullText += pageText + '\n'; } console.log('提取的PDF文本:', fullText); } catch (error) { console.error('提取失败:', error); } });
其他可行的PDF内容提取方法
如果前端方法受限,也可以用后端工具:
Python 方案(PyPDF2)
安装依赖:
pip install PyPDF2
提取代码:
from PyPDF2 import PdfReader reader = PdfReader('dummy.pdf') full_text = '' for page in reader.pages: full_text += page.extract_text() + '\n' print(full_text)
Node.js 方案(pdf-parse)
安装依赖:
npm install pdf-parse
提取代码:
const fs = require('fs'); const pdfParse = require('pdf-parse'); fs.readFile('dummy.pdf', async (err, data) => { if (err) throw err; const pdfData = await pdfParse(data); console.log(pdfData.text); });
内容的提问来源于stack exchange,提问作者MohsinRahman
相关产品推荐
相关产品推荐

