前端怎么预览pdf 试了几种方法都不太行 有没有别的办法?

前端怎么预览pdf iframe和一些库
要么完全打不开 白屏 要么只能看第一页
企微自建应用

阅读 3.6k
avatarAI BotBETA

在前端预览 PDF 文件时,有一些常见的方法,但有时候可能会遇到一些问题。下面我将介绍一些可能的方法,并提供可能的解决方案。

方法一:使用 iframe

将 PDF 文件放入 iframe 标签中是一种简单的方法,但有时候可能会遇到白屏问题。这可能是因为 PDF 文件没有正确加载,或者浏览器的安全策略阻止了 PDF 的加载。

解决方法:

  1. 确保 PDF 文件的路径正确,文件能够被正确地加载。
  2. 确保浏览器的安全策略允许加载 PDF 文件。在某些情况下,可能需要设置合适的 CORS 策略。

方法二:使用 JavaScript 库

有一些 JavaScript 库可以帮助预览 PDF 文件,例如 PDF.js。这些库通常能够提供更好的 PDF 渲染和交互体验。

解决方法:

  1. 确保正确地引入了库,并且库的依赖项也被正确地加载。
  2. 检查库的文档和示例代码,确保正确地使用了库的 API。
  3. 如果只能看到第一页,可能是库的限制或者配置问题。可以尝试调整库的配置参数,或者寻找其他支持预览多页的库。

其他方法:

  1. 使用后端服务: 如果前端无法直接预览 PDF,可以考虑将 PDF 文件上传到后端服务器,然后通过服务器端脚本(如 PHP、Node.js 等)来处理和渲染 PDF。这种方式可能需要更多的开发工作,但有时候可能是最有效的解决方案。
  2. 使用浏览器扩展: 一些浏览器扩展程序可能能够提供更好的 PDF 预览体验。可以尝试搜索并安装适合的扩展程序。

总结来说,前端预览 PDF 文件可能会遇到各种问题,需要尝试不同的方法并找到适合的解决方案。如果以上方法都无法解决问题,可能需要考虑使用后端服务或者浏览器扩展程序来实现预览功能。

3 个回答

PDF 虽然都叫 PDF,但其实内部有很多设计,可以支持到不同的人看到不同的内容。

所以首先你要确认这个 PDF 是可以全部打开阅览的。你可以拖到浏览器一个单独的 tab 里试试,目前浏览器应该都支持 PDF。

至于如何使用 pdfjs,贴一段我自己读取 PDF 内容的代码吧:

import { getDocument } from 'pdfjs-dist';
import 'pdfjs-dist/build/pdf.worker?worker';

export async function getContentFromPdf(pdf: ArrayBuffer): Promise<string> {
  const doc = await getDocument(pdf).promise;
  let content = '';
  for (let i = 0, len = doc.numPages; i < len; i++) {
    const page = await doc.getPage(i + 1);
    const textContent = await page.getTextContent();
    content += textContent.items
      .map(item => (item as TextItem).str).join(' ');
  }
  return content;
}

其实官方文档渲染部分写得比较详细,就是导入部分没怎么提,所以你可以两相配合一下,应该就能解决问题了。

pc 就 iframe embed 直接读。

移动端就 pdfjs


如果 iframe 都只能看第一页,估计是 pdf 有问题

可以考虑后端转一下,不行就转图片,缺点是会丢失文字选中一些东西

这个我知道,如果你是在PC环境的话就很好处理,直接后端返回pdf,绝大部分浏览器都支持pdf预览,不支持的也可以弹下载。如果是移动端的话,支持就没那么好了,安卓基本都不支持pdf在线预览,微信、浏览器都不支持。ios部分支持,有些设备只能查看第一页,不能翻页,总的来说,移动端对pdf的支持很差劲,需要做兼容处理,常见的处理方式比如招行APP很多pdf协议都是尝试直接预览,但是提供了一个按钮切换渲染方式。这里的兼容方式就是pdf.js,你可以尝试一下使用pdfjs去打开pdf或者,你可以先用用我的服务,用下面这种方式,在链接中拼接一个file=<pdf路径>,它会使用pdfjs去加载这个pdf文件。如果需要的话,我可以把这个页面发给你。pdf.js官网提供的版本只支持ES6,兼容es5版本的需要在网上找

http://pdfjs.hec9527.top/?file=http://test.hec9527.top/chatai...

image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏