最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

步驟 1:安裝依賴

首先,在項目中安裝 html2canvas 和 jspdf:

npm install html2canvas jspdf

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

以下是一個完整的 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 {
      // 存儲用戶選擇的頁面大小,默認(rèn)為 A4
      selectedPageSize: 'a4',
      // 存儲用戶選擇的頁面方向,默認(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 實例
        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();

        // 計算圖像的寬度和高度,使圖像按比例適應(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)的錯誤
        console.error('導(dǎo)出 PDF 時出錯:', error);
      }
    }
  }
};
</script>

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

代碼解釋

模板部分(<template>):

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

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

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

腳本部分(<script>):

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

exportToPDF 方法是核心邏輯:

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

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

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

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

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

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

樣式部分(<style>):

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

使用方法

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

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

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

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

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

相關(guān)文章

  • vue?封裝一個高質(zhì)量的表單通用組件

    vue?封裝一個高質(zhì)量的表單通用組件

    這篇文章主要為大家介紹了vue如何封裝一個高質(zhì)量的表單通用組件方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • vue 通過 Prop 向子組件傳遞數(shù)據(jù)的實現(xiàn)方法

    vue 通過 Prop 向子組件傳遞數(shù)據(jù)的實現(xiàn)方法

    這篇文章主要介紹了vue 通過 Prop 向子組件傳遞數(shù)據(jù)的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 詳解vue的diff算法原理

    詳解vue的diff算法原理

    這篇文章主要介紹了詳解vue的diff算法原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • vue如何添加jest測試

    vue如何添加jest測試

    這篇文章主要介紹了vue如何添加jest測試問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 使用 JSON.stringify() 列化一個Error

    使用 JSON.stringify() 列化一個Error

    這篇文章主要介紹了使用 JSON.stringify() 列化一個Error,需要的朋友可以參考下
    2023-10-10
  • 一文詳解Vue3中使用ref獲取元素節(jié)點

    一文詳解Vue3中使用ref獲取元素節(jié)點

    這篇文章主要介紹了一文詳解Vue3中使用ref獲取元素節(jié)點,本文介紹在vue3的setup中使用composition?API獲取元素節(jié)點的幾種方法,需要的朋友可以參考一下
    2022-07-07
  • Vue2?Observer實例dep和閉包中dep區(qū)別詳解

    Vue2?Observer實例dep和閉包中dep區(qū)別詳解

    這篇文章主要為大家介紹了Vue2?Observer實例dep和閉包中dep區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • vue中調(diào)用百度地圖獲取經(jīng)緯度的實現(xiàn)

    vue中調(diào)用百度地圖獲取經(jīng)緯度的實現(xiàn)

    最近做個項目,需要實現(xiàn)獲取當(dāng)前位置的經(jīng)緯度,所以本文主要介紹了vue中調(diào)用百度地圖獲取經(jīng)緯度的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Vue全局?jǐn)r截所有請求并在請求頭中添加token方式

    Vue全局?jǐn)r截所有請求并在請求頭中添加token方式

    這篇文章主要介紹了Vue全局?jǐn)r截所有請求并在請求頭中添加token方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • vue學(xué)習(xí)之mintui picker選擇器實現(xiàn)省市二級聯(lián)動示例

    vue學(xué)習(xí)之mintui picker選擇器實現(xiàn)省市二級聯(lián)動示例

    本篇文章主要介紹了vue學(xué)習(xí)之mintui picker選擇器實現(xiàn)省市二級聯(lián)動示例,非常具有實用價值,需要的朋友可以參考下
    2017-10-10

最新評論

武冈市| 长宁县| 双鸭山市| 肃宁县| 克什克腾旗| 温宿县| 通化市| 凤台县| 河北省| 绥阳县| 大关县| 信丰县| 土默特右旗| 安平县| 开阳县| 肇庆市| 醴陵市| 高碑店市| 淳化县| 商河县| 沈阳市| 广东省| 塘沽区| 巩义市| 赤城县| 邹平县| 吴旗县| 克东县| 拉萨市| 东安县| 阿克苏市| 仙桃市| 彰化市| 武城县| 赫章县| 福鼎市| 泾阳县| 新平| 洛阳市| 黄大仙区| 安溪县|