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

如何从上传的PDF文件中读取保留换行符的文本内容

问题原因

  • 你直接读取PDF原始二进制内容必然得到乱码:PDF是包含字体、排版、元数据等信息的复合二进制格式,不是纯文本文件,无法直接读取内容,必须通过专用解析库提取文本。
  • 原有代码存在异步逻辑错误:FileReader的load事件是异步触发的,你在事件回调外直接return output时,回调还没执行,永远拿不到正确结果。

正确实现方案

用Mozilla维护的pdf.js库完成PDF文本提取,这是目前浏览器端解析PDF最稳定的方案,原生支持保留文本换行格式。

代码实现

HTML部分

<input type="file" id="file" accept=".pdf">
<p id="result"></p>
<!-- 引入pdf.js的生产环境umd包和对应的worker包即可 -->

JS部分

// 配置pdf.js的worker文件路径,和你引入的pdf.js文件保持同路径即可
pdfjsLib.GlobalWorkerOptions.workerSrc = 'pdf.worker.min.js';

// 封装异步解析函数,PDF解析全流程为异步操作
async function readPdf(file) {
  const arrayBuffer = await file.arrayBuffer();
  const pdf = await pdfjsLib.getDocument({ data: arrayBuffer }).promise;
  let fullText = '';

  // 遍历PDF所有页面提取文本
  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('\n');
    fullText += pageText + '\n';
  }

  return fullText.trim();
}

// 监听文件选择事件触发解析
document.getElementById('file').addEventListener('change', async (e) => {
  const file = e.target.files[0];
  if (!file || file.type !== 'application/pdf') return;
  const text = await readPdf(file);
  // 此处text变量就是带\n的目标文本,符合你要求的存储格式
  console.log('提取结果:', text);
  document.getElementById('result').textContent = text;
});

注意事项

提取的文本默认会保留PDF内的原生换行,你示例的场景下得到的结果就是"Hello World\nHow are you today?",完全匹配需求。不要用同步方式调用解析函数,所有PDF操作都为异步逻辑,统一用async/await或者Promise回调处理结果即可。

内容的提问来源于stack exchange,提问作者Robert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:21:02