不依赖第三方库,说下如何使用js读取pdf?

不依赖第三方库,纯前端 JavaScript 读取 PDF 文件内容比较困难,主要是因为 JavaScript 本身没有直接访问文件二进制数据的能力(除非用户主动选择文件并通过 <input type="file"> 上传)。 即使上传了文件,JavaScript 也无法直接解析 PDF 的二进制格式。

如果一定要在前端实现不依赖第三方库读取 PDF 内容,可以考虑以下几种方法,但都有一定的局限性:

  1. 利用 FileReader API 读取文件内容,然后尝试解析 PDF 文本内容。 这种方法只适用于非常简单的 PDF 文件,且提取出的文本很可能丢失格式信息,甚至包含乱码。 PDF 文件格式复杂,直接解析二进制数据非常困难。
const input = document.createElement('input');
input.type = 'file';
input.accept = '.pdf';

input.onchange = (event) => {
  const file = event.target.files[0];
  const reader = new FileReader();

  reader.onload = (e) => {
    const uint8Array = new Uint8Array(e.target.result);
    //  尝试将 Uint8Array 转换为字符串,但这通常会导致乱码或不完整的内容
    const text = new TextDecoder("utf-8").decode(uint8Array);
    console.log(text); //  输出的内容很可能不完整或包含乱码

    //  更复杂的解析需要手动处理 PDF 的二进制结构,这非常困难
  };

  reader.readAsArrayBuffer(file);
};

document.body.appendChild(input);
  1. 如果 PDF 文件非常简单,并且只包含文本信息,可以尝试使用 pdf.js 的精简版本。 pdf.js 是一个功能强大的 PDF 渲染库,但完整版比较庞大。 你可以尝试提取其中核心代码,只用于文本提取,从而减小文件大小。 但这需要对 pdf.js 的源码有深入了解,并且仍然无法处理复杂的 PDF 文件。

总结:

以上两种方法都有很大的局限性,并不推荐在实际项目中使用。 在前端处理 PDF 文件,强烈建议使用成熟的第三方库,例如 pdf.jsmozilla-pdf.js。 这些库经过了充分的测试和优化,能够处理各种复杂的 PDF 文件,并提供丰富的功能,例如渲染、文本提取、注释等等。 使用第三方库可以大大简化开发流程,并提高代码的可靠性。

最终建议: 不要尝试在前端不使用任何库解析 PDF,使用 pdf.js 或其他成熟的库是最佳选择。

posted @ 2024-11-24 18:07  王铁柱6  阅读(369)  评论(0)    收藏  举报