91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue頁面如何生成PDF

發布時間:2022-05-24 17:58:36 來源:億速云 閱讀:1202 作者:iii 欄目:開發技術

這篇文章主要講解了“Vue頁面如何生成PDF”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Vue頁面如何生成PDF”吧!

安裝依賴

npm install --save html2canvas  // 頁面轉圖片
npm install jspdf --save  // 圖片轉pdf

頁面轉圖片

新建一個 index.vue 頁面:

<template>
  <div ref="pdf">
    這是待轉換的頁面,點擊 
    <button @click="handleExport">導出</button> 按鈕,完成導出操作。
  </div>
</template>

<script>
import {downloadPDF} from "@/util/pdf.js"  //工具方法,導出操作
export default {
  name: "pdf",
  data() {
    return {};
  },
  methods: {
    handleExport(){
      downloadPDF(this.$refs.pdf)
    }
  }
};
</script>

頁面很簡單,一段話加上一個導出按鈕。整個頁面被設置別名 (ref=“pdf”),導出的時候通過別名導出整個頁面。

按鈕點擊事件中調用了一個工具方法 downloadPDF(),來自于工具類 pdf.js:

import html2canvas from "html2canvas";

export const downloadPDF = page => {
  html2canvas(page).then(function(canvas) {
    page.appendChild(canvas);
  });
};

也很簡單,首先引入了 html2canvas,定義downloadPDF方法,接受一個參數就是要導出的內容,可以使用id獲取,也可以使用 ref 。

運行結果:

Vue頁面如何生成PDF

當我們點擊導出按鈕后,在現有的頁面增加了一行相同的內容。通過元素檢查器可以看到增加的這行內容實際是一個 canvas 圖像,里面的按鈕已經不可以操作了。

這樣,頁面轉換圖片的過程就完成了。

圖片轉PDF

首先給index.vue改造一下,為了讓我們導出的pdf好看一點,使用el-table做個表格,其它的導出邏輯不變:

<template>
  <div ref="pdf">
    
    <el-table
      :data="tableData"
      >
      <el-table-column
        prop="date"
        label="時間"
        width="180">
      </el-table-column>
      <el-table-column
        prop="name"
        label="姓名"
        width="180">
      </el-table-column>
      <el-table-column
        prop="address"
        label="對我說">
      </el-table-column>
    </el-table>

    <button @click="handleExport">導出</button>
  </div>
</template>
<script>
import {downloadPDF} from "@/util/pdf.js"  //工具方法,導出操作
export default {
  name: "pdf",
  data() {
    return {
      
          tableData: [{
            date: '昨天',
            name: '劉德華',
            address: '你好帥'
          }, {
            date: '今天',
            name: '郭富城',
            address: '你最帥'
          }, {
            date: '明天',
            name: '張學友',
            address: '你賊帥'
          }, {
            date: '每天',
            name: '黎明',
            address: '我沒你帥'
          }]
    };
  },
  methods: {
    handleExport(){
      downloadPDF(this.$refs.pdf)
    }
  }
};
</script>

效果圖:

Vue頁面如何生成PDF

然后改造一下pdf.js,增加上pdf轉換邏輯

import html2canvas from "html2canvas";
import jsPDF from "jspdf";

export const downloadPDF = page => {
  html2canvas(page).then(function(canvas) {
    canvas2PDF(canvas);
  });
};

const canvas2PDF = canvas => {
  let contentWidth = canvas.width;
  let contentHeight = canvas.height;
  
  let imgHeight = contentHeight;
  let imgWidth = contentWidth;

  // 第一個參數: l:橫向  p:縱向
  // 第二個參數:測量單位("pt","mm", "cm", "m", "in" or "px")
  let pdf = new jsPDF("l", "pt");

  pdf.addImage(
    canvas.toDataURL("image/jpeg", 1.0),
    "JPEG",
    0,
    0,
    imgWidth,
    imgHeight
  );

  pdf.save("導出.pdf");
};

canvas2PDF 方法中創建了jsPDF的實例,然后添加上一步生成的圖片,最后保存導出pdf文件。

導出的文件效果:

Vue頁面如何生成PDF

A4打印適配

因為部分需求有需要生成的頁面使用A4紙打印,那么pdf生成時的寬高尺寸就不能像上面一樣設定。需要按照A4紙的尺寸比例調整(其它打印需求同理,使用對應紙張比例即可)

那么改造一下 pdf.js

import html2canvas from "html2canvas";
import jsPDF from "jspdf";

export const downloadPDF = page => {
  html2canvas(page).then(function(canvas) {
    canvas2PDF(canvas);
  });
};

const canvas2PDF = canvas => {
  let contentWidth = canvas.width;
  let contentHeight = canvas.height;

  //a4紙的尺寸[595.28,841.89],html頁面生成的canvas在pdf中圖片的寬高
  let imgWidth = 595.28;
  let imgHeight = 592.28/contentWidth * contentHeight;

  // 第一個參數: l:橫向  p:縱向
  // 第二個參數:測量單位("pt","mm", "cm", "m", "in" or "px")
  let pdf = new jsPDF("p", "pt");

  pdf.addImage(
    canvas.toDataURL("image/jpeg", 1.0),
    "JPEG",
    0,
    0,
    imgWidth,
    imgHeight
  );

  pdf.save("導出.pdf");
};

這里面將 imgWidth 和 imgHeight 按照A4紙比例調整后,導出的pdf就可以正常比例打印了。

感謝各位的閱讀,以上就是“Vue頁面如何生成PDF”的內容了,經過本文的學習后,相信大家對Vue頁面如何生成PDF這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉首市| 甘孜| 静安区| 清水河县| 五峰| 天长市| 钦州市| 梁河县| 乌拉特前旗| 巴林左旗| 盘锦市| 图们市| 东平县| 东城区| 邛崃市| 庆元县| 吉安县| 亳州市| 尼勒克县| 柳江县| 沙湾县| 和林格尔县| 四川省| 平塘县| 武邑县| 周宁县| 东莞市| 吴旗县| 屏边| 疏勒县| 雅安市| 惠水县| 芒康县| 凤庆县| 安宁市| 醴陵市| 锦屏县| 普宁市| 平阳县| 临海市| 洪泽县|