基于PDFJS提取PDF文本:旧代码失效求新版可用代码
新版PDF.js 文本提取可用实现代码
我刚好有在PDF.js v4.x及以上版本中验证过的可用文本提取代码,分享给你:
// 先确保引入PDF.js库,比如通过CDN加载: // <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/4.0.379/pdf.min.js"></script> async function extractTextFromPDF(pdfSource) { try { // 根据传入的资源类型初始化PDF文档(支持URL或本地文件ArrayBuffer) const pdfConfig = typeof pdfSource === 'string' ? { url: pdfSource } : { data: pdfSource }; const pdf = await pdfjsLib.getDocument(pdfConfig).promise; let fullExtractedText = ''; // 遍历PDF的每一页提取文本 for (let pageNumber = 1; pageNumber <= pdf.numPages; pageNumber++) { const page = await pdf.getPage(pageNumber); const textContent = await page.getTextContent(); // 拼接当前页的所有文本片段 const pageText = textContent.items.map(item => item.str).join(' '); fullExtractedText += `${pageText}\n\n`; } return fullExtractedText; } catch (error) { console.error('提取PDF文本时发生错误:', error); throw error; } } // 【使用示例1:提取在线PDF文本】 extractTextFromPDF('https://example.com/your-document.pdf') .then(text => { console.log('提取到的完整文本:', text); // 这里可以将文本渲染到页面元素中,比如 document.getElementById('text-output').textContent = text; }) .catch(err => console.error(err)); // 【使用示例2:提取本地上传的PDF文本】 document.getElementById('pdf-upload-input').addEventListener('change', async (e) => { const selectedFile = e.target.files[0]; if (selectedFile && selectedFile.type === 'application/pdf') { const fileBuffer = await selectedFile.arrayBuffer(); const extractedText = await extractTextFromPDF(fileBuffer); console.log('本地PDF提取结果:', extractedText); } });
和旧版代码的核心差异说明:
- 新版PDF.js废弃了旧的回调式API,改用
promise结合async/await的异步写法,代码更简洁易维护 getDocument返回的对象需要通过.promise属性获取文档实例,这是新版API的强制要求- 页面文本提取通过
getTextContent()完成,返回的textContent.items中每个元素的str属性直接对应文本内容,无需处理旧版中复杂的字体映射逻辑
内容的提问来源于stack exchange,提问作者jufrfa
相关产品推荐
相关产品推荐

