Vue 指定 DIV 導出 PDF


Vue項目, 將 DIV 以 PDF 的形式導出
1
<template> 2 <div class="btn" @click="downloadPdf">下載</div> 3 <div ref="pdf">我是一個要變為圖片或PDF的div</div> 4 </template> 5 <script> 6 import html2canvas from 'html2canvas' 7 import jspdf from 'jspdf' 8 export default { 9 name: "printDiv", 10 data () { 11 return { 12 pdf: null 13 } 14 }, 15 methods: { 16 downloadPdf () { 17 let target = this.pdf 18 html2canvas(target, { 19 useCORS: true, // 當圖片是鏈接地址時,需加該屬性,否組無法顯示圖片 20 "imageTimeout": 0, 21 'scale': 2, 22 "width": 592, 23 "height": 841, 24 }) 25 .then(canvas => { 26 console.log(canvas) 27 let contentWidth = canvas.width; // 592px 28 let contentHeight = canvas.height; // 841px 29 //一頁pdf顯示html頁面生成的canvas高度; 30 let pageHeight = contentWidth / 592 * 841; 31 //未生成pdf的html頁面高度 32 let leftHeight = contentHeight; 33 //頁面偏移 34 // let offsetX = 100; 35 // let offsetY = 100; 36 let offsetX = 0; 37 let offsetY = 0; 38 //a4紙的尺寸[595.28,841.89],html頁面生成的canvas在pdf中圖片的寬高 39 let imgWidth = 592; 40 let imgHeight = 592 / contentWidth * contentHeight; 41 let pageData = canvas.toDataURL('image/jpeg', 1.0); 42 43 // 第一個方向,第二個單位,第三個尺寸格式 44 // landscape橫向 45 // let pdf = new jspdf('landscape', 'pt', 'a4'); 46 let pdf = new jspdf('', 'pt', 'a4'); 47 48 //有兩個高度需區分,一個是html頁面的實際高度,和生成pdf的頁面高度(841.89) 49 //當內容未超過pdf一頁顯示的范圍,無需分頁 50 if(leftHeight < pageHeight) { 51 pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight) 52 } else { 53 while(leftHeight > 0) { 54 pdf.addImage(pageData, 'JPEG', offsetX, offsetY, imgWidth, imgHeight) 55 leftHeight -= pageHeight; 56 offsetX -= 592; 57 offsetY -= 841; 58 //避免添加空白頁 59 if(leftHeight > 0) { 60 pdf.addPage(); 61 } 62 } 63 } 64 let name = '文件名.pdf'; // 定義生成的pdf的文件名字 65 pdf.save(name); 66 }); 67 } 68 }, 69 mounted () { 70 this.pdf = this.$refs.pdf 71 } 72 } 73 </script>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM