当前位置:首页 > VUE

VUE实现PDF打印页面

2026-01-23 09:48:38VUE

使用vue-pdf-embed组件实现PDF打印

安装vue-pdf-embed依赖包

npm install vue-pdf-embed

在Vue组件中引入并使用

<template>
  <div>
    <vue-pdf-embed :source="pdfUrl" ref="pdfRef" />
    <button @click="printPDF">打印PDF</button>
  </div>
</template>

<script>
import VuePdfEmbed from 'vue-pdf-embed'

export default {
  components: {
    VuePdfEmbed
  },
  data() {
    return {
      pdfUrl: '/path/to/your/file.pdf'
    }
  },
  methods: {
    printPDF() {
      window.print()
    }
  }
}
</script>

使用PDF.js库实现自定义打印

安装pdfjs-dist库

npm install pdfjs-dist

实现PDF渲染和打印功能

<template>
  <div>
    <div ref="pdfContainer"></div>
    <button @click="printPDF">打印</button>
  </div>
</template>

<script>
import * as pdfjsLib from 'pdfjs-dist'
import 'pdfjs-dist/web/pdf_viewer.css'

export default {
  data() {
    return {
      pdfUrl: '/path/to/your/file.pdf'
    }
  },
  methods: {
    async loadPDF() {
      const loadingTask = pdfjsLib.getDocument(this.pdfUrl)
      const pdf = await loadingTask.promise

      for (let i = 1; i <= pdf.numPages; i++) {
        const page = await pdf.getPage(i)
        const viewport = page.getViewport({ scale: 1.0 })

        const canvas = document.createElement('canvas')
        const context = canvas.getContext('2d')
        canvas.height = viewport.height
        canvas.width = viewport.width

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

        this.$refs.pdfContainer.appendChild(canvas)
      }
    },
    printPDF() {
      const printWindow = window.open('', '_blank')
      printWindow.document.write('<html><head><title>打印PDF</title></head><body>')
      printWindow.document.write(this.$refs.pdfContainer.innerHTML)
      printWindow.document.write('</body></html>')
      printWindow.document.close()
      printWindow.focus()
      printWindow.print()
    }
  },
  mounted() {
    this.loadPDF()
  }
}
</script>

使用iframe嵌入PDF实现打印

创建iframe组件打印PDF

<template>
  <div>
    <iframe 
      ref="pdfFrame" 
      :src="pdfUrl" 
      style="width: 100%; height: 800px; border: none;"
    ></iframe>
    <button @click="printPDF">打印</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      pdfUrl: '/path/to/your/file.pdf'
    }
  },
  methods: {
    printPDF() {
      this.$refs.pdfFrame.contentWindow.print()
    }
  }
}
</script>

使用CSS优化打印样式

添加打印样式表

<style scoped>
@media print {
  body * {
    visibility: hidden;
  }
  .pdf-container, .pdf-container * {
    visibility: visible;
  }
  .pdf-container {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
  }
  button {
    display: none;
  }
}
</style>

处理PDF文件下载与打印

从后端API获取PDF并打印

<template>
  <div>
    <button @click="fetchAndPrintPDF">下载并打印PDF</button>
  </div>
</template>

<script>
export default {
  methods: {
    async fetchAndPrintPDF() {
      const response = await fetch('/api/get-pdf')
      const blob = await response.blob()
      const url = URL.createObjectURL(blob)

      const iframe = document.createElement('iframe')
      iframe.style.display = 'none'
      iframe.src = url
      document.body.appendChild(iframe)

      iframe.onload = () => {
        setTimeout(() => {
          iframe.contentWindow.print()
          URL.revokeObjectURL(url)
          document.body.removeChild(iframe)
        }, 500)
      }
    }
  }
}
</script>

VUE实现PDF打印页面

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

相关文章

实现vue页面回退

实现vue页面回退

监听浏览器返回事件 在Vue组件中使用beforeRouteLeave导航守卫,可以监听路由变化。该方法在离开当前路由前触发,适用于需要确认或保存数据的场景。 beforeRouteLeave(…

vue实现关闭页面

vue实现关闭页面

关闭当前页面的方法 在Vue中关闭当前页面可以通过JavaScript的window.close()方法实现。该方法会关闭当前浏览器窗口或标签页。 methods: { closePage()…

vue页面分离的实现

vue页面分离的实现

Vue 页面分离的实现方法 组件化开发 Vue 的核心思想之一是组件化,通过将页面拆分为多个可复用的组件实现分离。每个组件包含独立的模板、逻辑和样式,通过 props 和 events 进行通信。…

vue实现点击页面切换

vue实现点击页面切换

Vue 实现页面切换 在 Vue 中实现页面切换通常可以通过以下几种方式实现,具体选择取决于项目需求和技术栈。 使用 Vue Router 实现页面切换 Vue Router 是 Vue 官方提供的…

VUE实现闪动

VUE实现闪动

VUE实现闪动效果的方法 使用CSS动画 通过Vue绑定类名或样式,结合CSS的@keyframes实现闪动效果。定义动画关键帧并应用到元素上。 <template> <…

VUE实现sshLinux

VUE实现sshLinux

VUE 实现 SSH 连接 Linux 在 Vue 中实现 SSH 连接 Linux 服务器,通常需要借助第三方库或后端服务。以下是几种常见的方法: 使用 xterm.js 和 WebSocket…