当前位置:首页 > 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 实现帖子功能 使用 Vue 实现帖子功能需要结合前端框架和后端数据交互,以下是实现的关键步骤和代码示例。 帖子列表展示 创建帖子列表组件,使用 v-for 渲染帖子数据,通过 axios 获…

vue实现画图

vue实现画图

Vue 实现画图功能 在 Vue 中实现画图功能通常需要结合 HTML5 的 <canvas> 元素或第三方库。以下是几种常见的方法: 使用原生 Canvas API 通过 Vue 直接…

vue实现token

vue实现token

Vue 中实现 Token 认证的方法 在 Vue 中实现 Token 认证通常涉及前端与后端的交互,包括 Token 的获取、存储、发送和刷新等操作。以下是具体实现步骤: 获取 Token 用户登…

vue 实现流程

vue 实现流程

Vue 实现流程 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是 Vue 实现的基本流程: 安装 Vue.js 通过 CDN 引入或使用 npm/yarn 安装:…

vue 简单实现

vue 简单实现

以下是 Vue 的简单实现示例,涵盖基础模板、数据绑定、方法及生命周期: 基础模板与数据绑定 <div id="app"> <p>{{ message }}</…

vue实现settimeout

vue实现settimeout

在 Vue 中实现 setTimeout Vue 中可以通过 JavaScript 原生的 setTimeout 方法实现延时操作,但需要注意结合 Vue 的响应式特性和生命周期管理。以下是几种常见实…