纯前端使用插件pdfjs实现将pdf转为图片的步骤

 更新时间:2025年01月18日 09:08:07   作者:键.  
这篇文章主要介绍了纯前端使用插件pdfjs实现将pdf转为图片的步骤,在实现过程中遇到了跨域问题,后台设置跨域但前端配置无效,最终采用后台返回PDF的base64格式,通过PDF.js将base64转换为二进制数据加载PDF,需要的朋友可以参考下

需求来源

预览简历功能在移动端,由于用了一层iframe把这个功能嵌套在了app端,再用一个iframe来预览,只有ios能看到,安卓就不支持,查了很多资料和插件,原理基本上都是用iframe实现的。最终转换思路,将pdf下载转为图片然后绘制到canvans中也是一样的效果。

实现步骤

先安装pdfjs插件,插件开源免费

官网:

https://github.com/mozilla/pdf.js

在vue或react项目中使用
https://github.com/mozilla/pdf.js/wiki/Setup-pdf.js-in-a-website

npm install pdfjs-dist --save

上面几步完成后就完成80%了,剩下的就是把图片绘制到canvans了

这里我直接贴源码了,注意一点,官方的示例中没有import 'pdfjs-dist/build/pdf.worker.mjs'; 这一段导入,会有一个报错

gihub上有解释
https://github.com/mozilla/pdf.js/issues/10478

<template>
  <div ref="showpdfRef"></div>
</template>

<script setup>
import { ref } from 'vue';
import { getDocument } from 'pdfjs-dist/legacy/build/pdf.mjs';
import 'pdfjs-dist/build/pdf.worker.mjs';

const showpdfRef = ref(null);

const pdfPath ='xxxxxxxx'

const loadingTask = getDocument(pdfPath);
loadingTask.promise
  .then(async (pdf) => {
    const canvas = document.createElement('canvas');
    const context = canvas.getContext('2d');
    // 循环遍历每一页pdf,将其转成图片
    for (let i = 1; i <= pdf._pdfInfo.numPages; i++) {
      // 获取pdf页
      const page = await pdf.getPage(i);
      // 获取页的尺寸
      const viewport = page.getViewport({ scale: 1 });
      // 设置canvas的尺寸
      canvas.width = viewport.width;
      canvas.height = viewport.height;
      // 将pdf页渲染到canvas上
      await page.render({ canvasContext: context, viewport: viewport }).promise;
      // 将canvas转成图片,并添加到页面上
      const img = document.createElement('img');
      img.src = canvas.toDataURL('image/png');
      showpdfRef.value.appendChild(img);
    }
   
  })
  .then(
    function () {
      console.log('# End of Document');
    },
    function (err) {
      console.error('Error: ' + err);
    },
  );
</script>

<style scoped></style>

最终效果:

问题

跨域

我直接放入设置了跨域的链接到url是可以直接得到pdf的,但是目前这个跨域问题,后台说是有设置跨域,但是我请求有跨域,我在前端配置了跨域也还是不行。多番尝试后这个问题还是没有解决。由于时间紧迫,所以采用备用方案:后台在接口返回了pdf的base64格式,pdfjs官方案例中说需要将base64转为二进制数据就可以加载。
https://github.com/mozilla/pdf.js/blob/master/examples/learning/helloworld64.html

总结

到此这篇关于纯前端使用插件pdfjs实现将pdf转为图片的文章就介绍到这了,更多相关插件pdfjs将pdf转为图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • JS实现新建文件夹功能

    JS实现新建文件夹功能

    这篇文章主要为大家详细介绍了JS实现新建文件夹功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 深入理解JavaScript的async/await

    深入理解JavaScript的async/await

    我们给大家分享了关于JavaScript的async/await的相关知识点内容,有需要的朋友们可以学习下。
    2018-08-08
  • JavaScript数组降维之将二维数组转为一维数组的五种方案

    JavaScript数组降维之将二维数组转为一维数组的五种方案

    本文介绍了五种数组降维方法,从最简单的Array.prototype.flat()方法,到兼容旧版本的concat;spread方法,再到通用的reduce方法,以及处理任意深度嵌套的递归方法, 兌时建议总结不同方法的特点、适用场景和性能差异,需要的朋友可以参考下
    2026-05-05
  • JavaScript之BOM location对象+navigator对象+history 对象

    JavaScript之BOM location对象+navigator对象+history 对象

    这篇文章主要介绍了JavaScript BOM中的 location对象、navigator对象、history 对象,下面围绕他们的相关语法及各种资料展开文章详细内容,需要的小伙伴可以参考一下,希望对大家有所帮助
    2021-12-12
  • js仿百度切换皮肤功能(html+css)

    js仿百度切换皮肤功能(html+css)

    这篇文章主要为大家详细介绍了JavaScript仿百度切换皮肤功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • JS转换金额大写方法详细例子

    JS转换金额大写方法详细例子

    在处理财务账款类需求时需要将转账金额写成大写的,下面这篇文章主要给大家介绍了关于JS转换金额大写方法的相关资料,文中给出了详细的代码示例,需要的朋友可以参考下
    2023-10-10
  • 如何用JS实现网页瀑布流布局

    如何用JS实现网页瀑布流布局

    这篇文章主要介绍了如何用JS实现网页瀑布流布局,帮助大家更好的利用JavaScript制作网页,感兴趣的朋友可以了解下
    2021-04-04
  • Echarts如何自定义label标签的样式(formatter,rich,添加图标等操作)

    Echarts如何自定义label标签的样式(formatter,rich,添加图标等操作)

    通常情况下,echarts中对于图像的设置是统一的,下面这篇文章主要给大家介绍了关于Echarts如何自定义label标签的样式的相关资料,包括formatter,rich,添加图标等操作,需要的朋友可以参考下
    2023-02-02
  • 原生JS实现悬停下拉菜单

    原生JS实现悬停下拉菜单

    这篇文章主要为大家详细介绍了原生JS实现悬停下拉菜单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • js模拟F11页面全屏显示

    js模拟F11页面全屏显示

    这篇文章主要为大家详细介绍了js模拟实现F11使页面全屏显示,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09

最新评论