使用pdfjs-dist绘制pdf文件

  • 版本声明:

vue@3.2.1

pdfjs-dist@2.5.207 

ps:如果使用 vue 3.x 的版本,切记不要使用太高的 pdfjs-dist 版本,会有语法报错

  • 函数引入:

  import * as PDFJS from 'pdfjs-dist';
  if (!PDFJS.GlobalWorkerOptions.workerSrc) {
    // 此处的 pdf work 文件放置到了 根目录/public/js/pdfjs 下
    PDFJS.GlobalWorkerOptions.workerSrc = 'js/pdfjs/pdf.worker.js';
  }

ps:public/js/pdfjs 下的文件是从 pdfjs-dist 的npm包的build文件下的文件复制的

  • 使用代码:

<!-- 用来装填pdfjs生成的canvas -->
<div id="pdfContainerRef"></div>
// setup 函数中需要定义的变量
// pdf附件的url地址
const url = ref();
// 此loading变量用来判断页面加载动画的显隐
// 如不需要可以不定义,下面的方法中也可以注释掉该loading变量的变更
const loading = ref(false); 
// 记得引入nextTick,此方法需要在 url 已经存在正确的pdf路径后再调用执行
const handleInitPdf = () => {
        nextTick(() => {
          // 初始化在线预览pdf
          PDFJS.getDocument(url.value).promise.then((pdfDoc_) => {
            for (let i = 1; i <= pdfDoc_.numPages; i++) {
              // Using promise to fetch the page
              pdfDoc_.getPage(i).then((page) => {
                // 用来计算页面宽度以变更缩放比例
                var desiredWidth = document.body.clientWidth || document.body.offsetWidth || document.body.scrollWidth;
                var viewport = page.getViewport({ scale: 1 });
                var scaledViewport = page.getViewport({ scale: desiredWidth / viewport.width });
                // 创建canvas元素并绘制内容
                const canvas = document.createElement('canvas');
                canvas.setAttribute('id', `canvasId${i}`);
                const context = canvas.getContext('2d');
                canvas.height = scaledViewport.height;
                canvas.width = scaledViewport.width;
                // 在canvas画布上绘制pdf
                const renderContext = {
                  canvasContext: context,
                  viewport: scaledViewport,
                };
                const renderTask = page.render(renderContext);

                document.getElementById('pdfContainerRef').appendChild(canvas);
                // 渲染完成执行
                renderTask.promise.then(() => {
                  loading.value = false;
                });
              });
            }
          });
        });
      };
  •  出现的问题记录:

  1. 版本兼容问题
  2. pdf work 路径问题
  3. getViewport 配置传参在不同的版本中使用上存在差异

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值