当前位置:首页 > VUE

vue项目实现pdf

2026-01-16 20:41:13VUE

实现PDF生成与展示

在Vue项目中实现PDF功能通常涉及生成、预览或下载PDF文件。以下是几种常见场景的实现方法:

使用vue-pdf插件预览PDF

安装依赖:

npm install vue-pdf

组件中使用:

<template>
  <pdf :src="pdfUrl"></pdf>
</template>

<script>
import pdf from 'vue-pdf'
export default {
  components: { pdf },
  data() {
    return {
      pdfUrl: '/sample.pdf' // 本地或远程PDF路径
    }
  }
}
</script>

支持分页显示:

<pdf v-for="i in numPages" :key="i" :src="pdfUrl" :page="i"></pdf>

使用jsPDF生成PDF

安装jsPDF库:

npm install jspdf

基本生成示例:

vue项目实现pdf

import jsPDF from 'jspdf'

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

添加图片和表格:

doc.addImage(imgData, 'JPEG', 10, 10, 50, 50)
doc.autoTable({ html: '#my-table' })

使用PDF.js处理复杂PDF

引入PDF.js库:

npm install pdfjs-dist

加载PDF文件:

vue项目实现pdf

const loadingTask = pdfjsLib.getDocument(url)
loadingTask.promise.then(pdf => {
  pdf.getPage(1).then(page => {
    const viewport = page.getViewport({ scale: 1.0 })
    const canvas = document.getElementById('pdf-canvas')
    const context = canvas.getContext('2d')
    canvas.height = viewport.height
    canvas.width = viewport.width

    page.render({
      canvasContext: context,
      viewport: viewport
    })
  })
})

服务器端生成PDF

使用Node.js后端生成:

const pdf = require('html-pdf')
app.post('/generate-pdf', (req, res) => {
  pdf.create(htmlTemplate).toStream((err, stream) => {
    stream.pipe(res)
  })
})

前端调用:

axios.post('/generate-pdf', { data }, { responseType: 'blob' })
  .then(response => {
    const blob = new Blob([response.data], { type: 'application/pdf' })
    const link = document.createElement('a')
    link.href = URL.createObjectURL(blob)
    link.download = 'document.pdf'
    link.click()
  })

处理PDF表单

使用pdf-lib处理表单:

npm install pdf-lib

填写PDF表单:

import { PDFDocument } from 'pdf-lib'

async function fillForm() {
  const pdfDoc = await PDFDocument.load(pdfBytes)
  const form = pdfDoc.getForm()
  form.getTextField('name').setText('John Doe')
  const modifiedPdf = await pdfDoc.save()
}

注意事项

  • 跨域问题:预览远程PDF需配置CORS
  • 性能优化:大PDF文件建议分页加载
  • 字体支持:中文需额外配置字体包
  • 移动端适配:注意viewport设置

根据具体需求选择合适的方案,简单预览推荐vue-pdf,复杂生成推荐jsPDF或pdf-lib,服务器端处理适合需要模板的场景。

标签: 项目vue
分享给朋友:

相关文章

vue实现表格多行修改

vue实现表格多行修改

实现多行编辑表格 在Vue中实现表格的多行编辑功能,可以通过以下方法完成。这里以Element UI的表格组件为例,但思路适用于其他UI库或原生实现。 数据准备 定义表格数据和编辑状态管理变量:…

vue实现按卡片轮播

vue实现按卡片轮播

实现卡片轮播的基本思路 在Vue中实现卡片轮播可以通过结合v-for指令和动态样式绑定完成。核心是维护一个当前显示卡片的索引,通过CSS过渡效果实现平滑切换。 基础实现步骤 模板部分 使用v-for…

vue实现下拉层级

vue实现下拉层级

Vue实现下拉层级菜单 使用Vue实现下拉层级菜单可以通过递归组件或动态渲染的方式完成。以下是两种常见实现方法: 递归组件实现 创建一个递归组件处理多级菜单结构: <template…

vue设计与实现 书

vue设计与实现 书

vue设计与实现 书 《Vue.js设计与实现》是一本深入探讨Vue.js框架内部原理和设计思想的书籍,适合希望深入理解Vue.js的开发者。以下是关于这本书的详细信息: 书籍内容 《Vue…

vue实现视频会议

vue实现视频会议

使用 Vue 实现视频会议 技术选型 Vue.js 作为前端框架,结合 WebRTC 技术实现实时音视频通信。常用的库包括: peerjs:简化 WebRTC 的点对点连接。 socket.io:用…

vue实现字母添加排序

vue实现字母添加排序

实现字母添加排序的方法 在Vue中实现字母添加排序功能,可以通过以下步骤完成: 创建Vue实例并定义数据 new Vue({ el: '#app', data: { letters…