当前位置:首页 > VUE

vue页面实现pdf

2026-03-08 10:31:29VUE

在Vue中实现PDF显示或生成

使用vue-pdf库显示PDF文件

安装vue-pdf库:

npm install vue-pdf

在组件中引入并使用:

import pdf from 'vue-pdf'

export default {
  components: { pdf },
  data() {
    return {
      pdfUrl: '/path/to/document.pdf',
      pageNum: 1,
      pageCount: 0
    }
  },
  methods: {
    onPageChange(pageNum) {
      this.pageNum = pageNum
    }
  }
}

模板部分:

<template>
  <div>
    <pdf :src="pdfUrl" @num-pages="pageCount = $event" @page-loaded="pageNum = $event" />
    <p>Page {{ pageNum }} of {{ pageCount }}</p>
  </div>
</template>

使用pdf-lib生成PDF文件

安装pdf-lib库:

vue页面实现pdf

npm install pdf-lib

生成PDF示例代码:

import { PDFDocument, StandardFonts, rgb } from 'pdf-lib'

async function createPdf() {
  const pdfDoc = await PDFDocument.create()
  const page = pdfDoc.addPage()
  const font = await pdfDoc.embedFont(StandardFonts.Helvetica)

  page.drawText('Hello Vue PDF!', {
    x: 50,
    y: page.getHeight() - 50,
    size: 30,
    font,
    color: rgb(0, 0, 0)
  })

  const pdfBytes = await pdfDoc.save()
  return pdfBytes
}

使用jsPDF生成PDF

安装jsPDF库:

npm install jspdf

基本使用示例:

vue页面实现pdf

import jsPDF from 'jspdf'

function generatePDF() {
  const doc = new jsPDF()
  doc.text('Hello Vue!', 10, 10)
  doc.save('document.pdf')
}

使用iframe嵌入PDF

简单嵌入方法:

<iframe 
  src="/path/to/document.pdf" 
  width="100%" 
  height="600px"
  style="border: none;">
</iframe>

使用PDF.js自定义渲染

安装pdfjs-dist:

npm install pdfjs-dist

使用示例:

import * as pdfjsLib from 'pdfjs-dist/webpack'

async function renderPDF(url, canvasElement) {
  const loadingTask = pdfjsLib.getDocument(url)
  const pdf = await loadingTask.promise
  const page = await pdf.getPage(1)

  const viewport = page.getViewport({ scale: 1.0 })
  const canvas = canvasElement
  const context = canvas.getContext('2d')

  canvas.height = viewport.height
  canvas.width = viewport.width

  const renderContext = {
    canvasContext: context,
    viewport: viewport
  }

  await page.render(renderContext).promise
}

注意事项

不同方案适用于不同场景:

  • 显示已有PDF:vue-pdf或PDF.js
  • 生成新PDF:pdf-lib或jsPDF
  • 简单嵌入:iframe方案

PDF文件较大时考虑分页加载或使用Web Worker处理。跨域访问PDF文件需要正确配置服务器CORS头。

标签: 页面vue
分享给朋友:

相关文章

vue slot实现

vue slot实现

vue slot 的实现方法 在 Vue 中,slot 是一种内容分发机制,允许父组件向子组件传递模板内容。以下是几种常见的 slot 实现方式: 默认 slot 默认 slot 是最基础的 slo…

vue多选实现

vue多选实现

Vue 多选实现方法 基础实现(v-model + multiple) 在 Vue 中实现多选可以通过 <select> 元素的 multiple 属性结合 v-model 完成。v-mo…

vue实现左右拉伸

vue实现左右拉伸

实现左右拉伸布局的方法 使用CSS Flexbox布局 Flexbox可以轻松实现左右拉伸的效果。通过设置display: flex和flex-grow属性,可以让元素填充可用空间。 <div…

vue实现单词逆转

vue实现单词逆转

实现单词逆转的方法 在Vue中实现单词逆转可以通过多种方式完成,以下是几种常见的方法: 使用计算属性逆转单词 计算属性是Vue中处理数据逻辑的理想选择。可以通过计算属性来实现单词逆转: <t…

vue实现穿梭框

vue实现穿梭框

Vue 穿梭框实现方法 穿梭框(Transfer)是一种常见的UI组件,用于在两个列表之间移动数据项。以下是基于Vue的实现方法。 基础结构搭建 创建两个列表容器和一个操作按钮区域,使用v-mode…

vue实现回顶部

vue实现回顶部

实现方法一:使用 window.scrollTo 在Vue组件中,可以通过调用 window.scrollTo 方法平滑滚动到页面顶部。该方法接受一个配置对象,指定滚动行为为平滑(smooth)。…