vue3实现pdf查看,pdfjs-dist实现

超简单pdf查看方式,代码复制黏贴直接就能用

首先是安装依赖

npm i pdfjs-dist@4.5.136

我这里版本很高,你不一定需要和我一样,但也不要太低

引入

css不一定需要,可以不用引入

import * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf.mjs'
import 'pdfjs-dist/web/pdf_viewer.css'

html代码

一个canvas完全够了

// 我这边是因为一次性将pdf所有页面展示,所以采用了遍历canvas的操作,如果你这边是翻页或单页,那么只需要一个canvas就够了
<canvas
  v-for="(_, index) in state.pdfPages"
  :key="index"
  width="500px"
  :ref="(el) => setPdfCanvasRef(el, index)"
/>

js代码

const state = reactive({
  // 文件路径
  pdfPath: pdf,
  // 总页数
  pdfPages: 1,
  // 页面缩放
  pdfScale: 1,
})
// 用于保存所有canvas的ref
const pdfCanvas = ref<any>([])

// 动态设置ref
const setPdfCanvasRef = (el: any, index: any) => {
  pdfCanvas.value[index] = el
}

// 加载pdf
const loadPDF = async (url: any) => {
  try {
    const loadingTask = pdfjsLib.getDocument({
      url,
      cMapUrl: `http//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjsLib.version}/pdf.worker.min.mjs`,
      cMapPacked: true,
    })
    const pdf = await loadingTask.promise
    state.pdfPages = pdf.numPages
    // 循环,一次性将所有页面画出
    for (let i = 1; i <= pdf.numPages; i++) {
      const page = await pdf.getPage(i)
      const viewport = page.getViewport({ scale: state.pdfScale })
      pdfCanvas.value[i - 1].height = viewport.height
      pdfCanvas.value[i - 1].width = viewport.width
      const context = pdfCanvas.value[i - 1].getContext('2d')
      const renderContext = {
        canvasContext: context,
        viewport: viewport,
      }
      page.render(renderContext)
    }
  } catch (error) {
    console.error('Error loading PDF:', error)
  }
}

复制粘贴,直接技能用

最后,有什么不懂的地方欢迎私信
我创建了一个技术交流微信群
加我V,拉你进群,备注来意
置顶的博客最下方有二维码,可加我V

这是我置顶博客的链接,点击跳转

Vue 3和TypeScript可以使用pdfjs-dist库来预览PDF文件。下面是一个简单的示例代码,演示如何在Vue 3和TypeScript中使用pdfjs-dist库进行PDF预览: 首先,你需要安装pdfjs-dist库。可以通过npm或者yarn命令来安装: ```shell npm install pdfjs-dist ``` 或者 ```shell yarn add pdfjs-dist ``` 接下来,在你的Vue组件中引入pdfjs-dist库并创建一个用于显示PDF内容的容器元素: ```html <template> <div> <canvas ref="pdfCanvas"></canvas> </div> </template> ``` 在组件的`mounted`生命周期钩子中,你可以使用pdfjs-dist来加载PDF文件并在Canvas上渲染它: ```typescript import { ref, onMounted } from 'vue'; import * as pdfjs from 'pdfjs-dist'; export default { setup() { const pdfCanvas = ref<HTMLCanvasElement | null>(null); let loadingTask: any; onMounted(async () => { try { const pdf = await pdfjs.getDocument('path/to/your/pdf'); // 替换为你的PDF文件路径 if (pdf) { const page = await pdf.getPage(1); // 获取第一页(页码从0开始) if (page) { const viewport = page.getViewport({ scale: 1 }); const canvas = document.createElement('canvas'); canvas.width = viewport.width; canvas.height = viewport.height; const context = canvas.getContext('2d'); page.render({ canvasContext: context, viewport }).then(() => { pdfCanvas.value = canvas; // 将渲染后的Canvas赋值给组件中的容器元素 }); } else { console.error('Failed to render PDF page'); } } else { console.error('Failed to load PDF document'); } } catch (error) { console.error('Error rendering PDF:', error); } finally { if (loadingTask) { loadingTask.cancel(); // 确保在组件销毁时取消加载任务以避免内存泄漏 } } }); return { pdfCanvas }; }, }; ``` 以上代码会在Vue组件中创建一个Canvas元素,并在该元素上渲染PDF的第一页。你可以根据需要修改代码以适应不同的PDF文件和页面范围。记得将`'path/to/your/pdf'`替换为你实际的PDF文件路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值