欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue使用html2canvas和jspdf實(shí)現(xiàn)PDF文件導(dǎo)出

 更新時(shí)間:2025年01月26日 10:31:36   作者:LCG元  
這篇文章主要為大家詳細(xì)介紹了Vue如何使用html2canvas和jspdf實(shí)現(xiàn)PDF文件導(dǎo)出功能并設(shè)置頁面大小及方向,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

在 Vue 項(xiàng)目中實(shí)現(xiàn)導(dǎo)出 PDF 文件、調(diào)整文件頁面大小和頁面方向的功能,使用 html2canvas 將 HTML 內(nèi)容轉(zhuǎn)換為圖片,再使用 jspdf 把圖片添加到 PDF 文件中。以下是詳細(xì)的實(shí)現(xiàn)步驟和代碼示例:

步驟 1:安裝依賴

首先,在項(xiàng)目中安裝 html2canvas 和 jspdf:

npm install html2canvas jspdf

步驟 2:創(chuàng)建 Vue 組件

以下是一個(gè)完整的 Vue 組件示例,包含導(dǎo)出 PDF、調(diào)整頁面大小和方向的功能:

<template>
  <div>
    <!-- 選擇頁面大小的下拉框 -->
    <select v-model="selectedPageSize">
      <option value="a4">A4</option>
      <option value="a3">A3</option>
      <option value="letter">Letter</option>
    </select>
    <!-- 選擇頁面方向的下拉框 -->
    <select v-model="selectedPageOrientation">
      <option value="portrait">縱向</option>
      <option value="landscape">橫向</option>
    </select>
    <!-- 導(dǎo)出 PDF 的按鈕 -->
    <button @click="exportToPDF">導(dǎo)出為 PDF</button>
    <!-- 需要導(dǎo)出為 PDF 的內(nèi)容區(qū)域 -->
    <div id="contentToExport">
      <h1>這是要導(dǎo)出為 PDF 的內(nèi)容</h1>
      <p>可以在這里添加更多文本、圖片、表格等元素。</p>
    </div>
  </div>
</template>

<script>
// 引入 html2canvas 用于將 HTML 元素轉(zhuǎn)換為 canvas 圖像
import html2canvas from 'html2canvas';
// 引入 jsPDF 用于創(chuàng)建和保存 PDF 文件
import jsPDF from 'jspdf';

export default {
  data() {
    return {
      // 存儲(chǔ)用戶選擇的頁面大小,默認(rèn)為 A4
      selectedPageSize: 'a4',
      // 存儲(chǔ)用戶選擇的頁面方向,默認(rèn)為縱向
      selectedPageOrientation: 'portrait'
    };
  },
  methods: {
    async exportToPDF() {
      // 獲取需要導(dǎo)出為 PDF 的 HTML 元素
      const element = document.getElementById('contentToExport');
      try {
        // 使用 html2canvas 將 HTML 元素轉(zhuǎn)換為 canvas 圖像
        const canvas = await html2canvas(element);
        // 將 canvas 圖像轉(zhuǎn)換為 base64 編碼的 PNG 圖片數(shù)據(jù)
        const imgData = canvas.toDataURL('image/png');

        // 根據(jù)用戶選擇的頁面大小和方向創(chuàng)建 jsPDF 實(shí)例
        const pdf = new jsPDF({
          orientation: this.selectedPageOrientation, // 頁面方向
          unit: 'mm', // 單位為毫米
          format: this.selectedPageSize // 頁面大小
        });

        // 獲取 PDF 頁面的寬度和高度
        const pdfWidth = pdf.internal.pageSize.getWidth();
        const pdfHeight = pdf.internal.pageSize.getHeight();

        // 計(jì)算圖像的寬度和高度,使圖像按比例適應(yīng)頁面
        const imgWidth = pdfWidth;
        const imgHeight = (canvas.height * imgWidth) / canvas.width;

        let heightLeft = imgHeight;
        let position = 0;

        // 將圖像添加到第一頁 PDF
        pdf.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight);
        heightLeft -= pdfHeight;

        // 如果圖像高度超過一頁,進(jìn)行分頁處理
        while (heightLeft >= 0) {
          position = heightLeft - imgHeight;
          pdf.addPage();
          pdf.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight);
          heightLeft -= pdfHeight;
        }

        // 保存 PDF 文件,文件名為 exported.pdf
        pdf.save('exported.pdf');
      } catch (error) {
        // 捕獲并打印導(dǎo)出過程中可能出現(xiàn)的錯(cuò)誤
        console.error('導(dǎo)出 PDF 時(shí)出錯(cuò):', error);
      }
    }
  }
};
</script>

<style scoped>
/* 為需要導(dǎo)出的內(nèi)容區(qū)域添加樣式 */
#contentToExport {
  padding: 20px;
  border: 1px solid #ccc;
  margin-top: 20px;
}
</style>

代碼解釋

模板部分(<template>):

兩個(gè) select 元素分別用于選擇頁面大小和頁面方向,通過 v-model 指令綁定到組件的數(shù)據(jù) selectedPageSize 和 selectedPageOrientation。

一個(gè)按鈕,點(diǎn)擊時(shí)觸發(fā) exportToPDF 方法進(jìn)行 PDF 導(dǎo)出操作。

一個(gè) div 元素,其 id 為 contentToExport,該元素內(nèi)的內(nèi)容將被導(dǎo)出為 PDF。

腳本部分(<script>):

data 函數(shù)返回兩個(gè)數(shù)據(jù)項(xiàng),分別存儲(chǔ)用戶選擇的頁面大小和頁面方向。

exportToPDF 方法是核心邏輯:

使用 document.getElementById 獲取要導(dǎo)出的 HTML 元素。

調(diào)用 html2canvas 將 HTML 元素轉(zhuǎn)換為 canvas 圖像,并將其轉(zhuǎn)換為 base64 編碼的 PNG 圖片數(shù)據(jù)。

根據(jù)用戶選擇的頁面大小和方向創(chuàng)建 jsPDF 實(shí)例。

計(jì)算圖像的寬度和高度,使其按比例適應(yīng)頁面。

將圖像添加到 PDF 中,如果圖像高度超過一頁,進(jìn)行分頁處理。

最后使用 pdf.save 方法保存 PDF 文件。

樣式部分(<style>):

為 #contentToExport 元素添加了一些樣式,使其在頁面上有邊框和內(nèi)邊距。

使用方法

將上述代碼保存為一個(gè) Vue 組件(例如 ExportPDF.vue),然后在其他組件中引入并使用:

<template>
  <div>
    <ExportPDF />
  </div>
</template>

<script>
import ExportPDF from './ExportPDF.vue';

export default {
  components: {
    ExportPDF
  }
};
</script>

到此這篇關(guān)于Vue使用html2canvas和jspdf實(shí)現(xiàn)PDF文件導(dǎo)出的文章就介紹到這了,更多相關(guān)Vue PDF導(dǎo)出內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue實(shí)現(xiàn)拖拽與排序功能的示例代碼

    vue實(shí)現(xiàn)拖拽與排序功能的示例代碼

    在Web應(yīng)用程序中,實(shí)現(xiàn)拖拽和排序功能是非常常見的需求,本文為大家介紹了如何使用Vue來實(shí)現(xiàn)一個(gè)簡(jiǎn)單但功能強(qiáng)大的拖拽與排序功能,感興趣的小伙伴可以參考下
    2023-10-10
  • vue項(xiàng)目使用electron進(jìn)行打包操作的全過程

    vue項(xiàng)目使用electron進(jìn)行打包操作的全過程

    我們都知道Electron項(xiàng)目分為了主進(jìn)程和渲染進(jìn)程,主進(jìn)程其實(shí)就是我們的Electron,渲染進(jìn)程就相當(dāng)于我們的Vue項(xiàng)目,下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目使用electron進(jìn)行打包操作的全過程,需要的朋友可以參考下
    2023-03-03
  • 一文帶你理解 Vue 中的生命周期

    一文帶你理解 Vue 中的生命周期

    在我們實(shí)際項(xiàng)目開發(fā)過程中,會(huì)非常頻繁地和 Vue 組件的生命周期打交道,接下來我們就從源碼的角度來看一下這些生命周期的鉤子函數(shù)是如何被執(zhí)行的,需要的朋友可以參考下面文章內(nèi)容
    2021-09-09
  • vue項(xiàng)目中錨點(diǎn)定位替代方式

    vue項(xiàng)目中錨點(diǎn)定位替代方式

    今天小編就為大家分享一篇vue項(xiàng)目中錨點(diǎn)定位替代方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • VUE.js實(shí)現(xiàn)動(dòng)態(tài)設(shè)置輸入框disabled屬性

    VUE.js實(shí)現(xiàn)動(dòng)態(tài)設(shè)置輸入框disabled屬性

    今天小編就為大家分享一篇VUE.js實(shí)現(xiàn)動(dòng)態(tài)設(shè)置輸入框disabled屬性,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • vue如何在store倉庫中使用路由

    vue如何在store倉庫中使用路由

    這篇文章主要介紹了vue如何在store倉庫中使用路由,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • vue地址欄直接輸入路由無效問題的解決

    vue地址欄直接輸入路由無效問題的解決

    這篇文章主要介紹了vue地址欄直接輸入路由無效問題的解決,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • vant自定義引入iconfont圖標(biāo)及字體的方法步驟

    vant自定義引入iconfont圖標(biāo)及字體的方法步驟

    因?yàn)関antUI給的圖標(biāo)非常少,為了滿足自己的需求,就應(yīng)該找到一種方法來向vant添加自己自定義的圖標(biāo),對(duì)于自定義圖標(biāo)我第一時(shí)間想到的就是阿里的iconfont矢量圖庫,這篇文章主要給大家介紹了關(guān)于vant自定義引入iconfont圖標(biāo)及字體的方法步驟,需要的朋友可以參考下
    2023-09-09
  • vuex的核心概念和基本使用詳解

    vuex的核心概念和基本使用詳解

    這篇文章主要為大家介紹了vuex的核心概念和基本使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • vue3通過父子傳值實(shí)現(xiàn)彈框功能

    vue3通過父子傳值實(shí)現(xiàn)彈框功能

    在Vue3中,我們可以通過?provide?和?inject?來實(shí)現(xiàn)父子組件之間的數(shù)據(jù)傳遞,這也適用于實(shí)現(xiàn)彈框功能,下面我們就來學(xué)習(xí)一下vue3實(shí)現(xiàn)彈框功能的具體方法吧
    2023-12-12

最新評(píng)論