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

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è)置頁(yè)面大小及方向,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

在 Vue 項(xiàng)目中實(shí)現(xiàn)導(dǎo)出 PDF 文件、調(diào)整文件頁(yè)面大小和頁(yè)面方向的功能,使用 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)整頁(yè)面大小和方向的功能:

<template>
  <div>
    <!-- 選擇頁(yè)面大小的下拉框 -->
    <select v-model="selectedPageSize">
      <option value="a4">A4</option>
      <option value="a3">A3</option>
      <option value="letter">Letter</option>
    </select>
    <!-- 選擇頁(yè)面方向的下拉框 -->
    <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ǔ)用戶選擇的頁(yè)面大小,默認(rèn)為 A4
      selectedPageSize: 'a4',
      // 存儲(chǔ)用戶選擇的頁(yè)面方向,默認(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ù)用戶選擇的頁(yè)面大小和方向創(chuàng)建 jsPDF 實(shí)例
        const pdf = new jsPDF({
          orientation: this.selectedPageOrientation, // 頁(yè)面方向
          unit: 'mm', // 單位為毫米
          format: this.selectedPageSize // 頁(yè)面大小
        });

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

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

        let heightLeft = imgHeight;
        let position = 0;

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

        // 如果圖像高度超過(guò)一頁(yè),進(jìn)行分頁(yè)處理
        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)出過(guò)程中可能出現(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 元素分別用于選擇頁(yè)面大小和頁(yè)面方向,通過(guò) 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ǔ)用戶選擇的頁(yè)面大小和頁(yè)面方向。

exportToPDF 方法是核心邏輯:

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

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

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

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

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

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

樣式部分(<style>):

為 #contentToExport 元素添加了一些樣式,使其在頁(yè)面上有邊框和內(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)文章

最新評(píng)論

彰武县| 佛冈县| 无锡市| 南平市| 鄂温| 宁夏| 竹北市| 和静县| 开阳县| 河南省| 宁德市| 交城县| 同仁县| 白水县| 锦屏县| 萝北县| 邮箱| 西昌市| 大渡口区| 垫江县| 昔阳县| 罗甸县| 文安县| 和平县| 青铜峡市| 眉山市| 镇赉县| 凤冈县| 大英县| 平定县| 龙南县| 松阳县| 浦北县| 山丹县| 望都县| 胶州市| 崇左市| 永福县| 冷水江市| 安宁市| 自治县|