国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue前端實現(xiàn)將頁面顯示內(nèi)容生成pdf文件的幾種方法,html2canvas、dom-to-image、jspdf(帶分頁)基本使用以及介紹

這篇具有很好參考價值的文章主要介紹了vue前端實現(xiàn)將頁面顯示內(nèi)容生成pdf文件的幾種方法,html2canvas、dom-to-image、jspdf(帶分頁)基本使用以及介紹。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

實際開發(fā)需求:vue項目中,根據(jù)數(shù)據(jù)結(jié)構(gòu)生成echarts圖表組件,生成帶有樣式的圖表以后,點擊下載按鈕,把圖表以pdf格式的文件下載到本地
實現(xiàn)思路:將vue界面的echarts組件生成圖片,然后使用插件將生成的圖片放入pdf中,再實現(xiàn)pdf文件的下載
涉及框架以及插件:vue、echarts、html2canvas、dom-to-image、jspdf

插件介紹:

vue、echarts 不用多說,vue前端的框架,echarts用來根據(jù)數(shù)據(jù)生成的帶有樣式效果的圖表;html2canvas與dom-to-image都是將界面上的dom生成圖片。

html2canvas

能夠?qū)崿F(xiàn)在用戶瀏覽器端直接對整個或部分頁面進行生成圖片,主要是將選中的頁面或者整個頁面渲染成一個canvas圖片,通過讀取DOM并將不同的樣式應(yīng)用到這些元素上實現(xiàn)??梢酝ㄟ^獲取HTML的某個元素,然后生成Canvas,從而生成圖片。

安裝
npm install --save html2canvas
或 yarn add html2canvas
引入
import html2canvas from 'html2canvas';

用法:

<div class="container" id="myDom1">
  測試
</div>
<style>
.container {
  width:100px;
  height:100px;
  background:red;
  color: #ffffff;
}
</style>
methods(){
  getImage(){
    html2canvas(document.querySelector("#myDom1")).then(canvas => {
        console.logo(canvas)
        document.body.appendChild(canvas);
        var dataUrl = canvas.toDataURL("image/png")
    });
  }
}
參數(shù)名稱 類型 默認(rèn)值 描述
allowTaint boolean false 允許跨域
background string #fff canvas的背景顏色,如果沒有設(shè)定默認(rèn)透明
height number null canvas高度設(shè)定
letterRendering boolean false 在設(shè)置了字間距的時候有用
logging boolean false 輸出信息
proxy string undefined 代理地址
taintTest boolean true 是否在渲染前測試圖片
timeout number 0 圖片加載延遲,默認(rèn)延遲為0,單位毫秒
width number null canvas的寬度
useCORS boolean false 圖片跨域問題
dom-to-image

它可以將任意DOM節(jié)點轉(zhuǎn)換成用JavaScript編寫的矢量(SVG)或光柵(PNG或JPEG)圖像。

安裝
npm install dom-to-image
或 yarn add dom-to-image
引入
import domtoimage from 'dom-to-image';
或 var domtoimage = require('dom-to-image');

基本用法:

<template>
  <div id=""myDom>
    <el-table
      :data="tableData"
      style="width: 100%">
      <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>
    ......
  </div>
</template>
methods(){
  getDomToImage(){
    let dom = document.getElementById('myDom');
    domtoimage.toPng(dom).then(function (dataUrl) {
        var img = new Image();
        img.src = dataUrl;
        document.body.appendChild(img);
    })
    .catch(function (error) {
        console.error('wrong!', error);
    });
  }
}

獲取一個png的blob:

domtoimage.toBlob(document.getElementById('myDom')).then(function (blob) {
        console.log(blob)
});
jspdf

jsPDF 是一個使用 Javascript 語言生成 PDF 的開源庫。你可以在 Firefox 插件,服務(wù)端腳本或是瀏覽器腳本中使用它。

安裝:
npm install jspdf
或 yarn add jspdf
引入
import jsPDF from "jspdf"

基本用法:

let pdf = new jsPDF('p', 'pt', 'a4);
參數(shù)1:l:橫向  p:縱向
參數(shù)2:單位("pt","mm", "cm", "m", "in" or "px")
參數(shù)3:格式,默認(rèn)為“a4”

常用方法:

pdf.addPage()  在PDF文檔中添加新頁面,參數(shù)如下,也可以不設(shè)置,默認(rèn)a4
pdf.addImage()  將圖像添加到PDF中
pdf.save(`保存的PDF文件.pdf`); 保存為pdf格式的文件

回到需求:vue項目中,根據(jù)數(shù)據(jù)結(jié)構(gòu)生成echarts圖表組件,生成帶有樣式的圖表以后,點擊下載按鈕,把圖表以pdf格式的文件下載到本地(帶分頁),部分代碼如下(思路)文章來源地址http://www.zghlxwxcb.cn/news/detail-822977.html

1.使用html2canvas
<template>
  <div id="pdfDom" ref="pdfDom">
    // 此處存放界面中顯示的內(nèi)容區(qū)域,生成pdf的內(nèi)容區(qū)域......
  </div>
</template>

methods(){
  let node = document.getElementById('pdfDom');
html2canvas(document.getElementById('pdfDom'), {
				scale: 2
			}).then(function (canvas) {
				var pdfWidth = canvas.width;
				var pdfHeight = canvas.height;
				var pageHeight = pdfWidth / 592.28 * 841.89;
				var leftHeight = pdfHeight;
				var position = 0;
				var imgWidth = 595.28;
				var imgHeight = 595.28 / pdfWidth * pdfHeight;
				var pageData = canvas.toDataURL("img/jpeg", 1.0);
				var pdf = new jsPDF('', 'pt', 'a4');
				// 判斷打印dom高度是否需要分頁,如果需要進行分頁處理
				if (leftHeight < pageHeight) {
					pdf.addImage(pageData, "JPEG", 0, 0, imgWidth, imgHeight)
				} else {
					while (leftHeight > 0) {
						pdf.addImage(pageData, "JPEG", 0, position, imgWidth, imgHeight)
						leftHeight -= pageHeight
						position -= 841.89
						if (leftHeight > 0) {
							pdf.addPage()
						}
					}
				}
				const aLink = document.createElement('a')
				document.body.appendChild(aLink)
				const url = URL.createObjectURL(_this.toBlob(pdf.output('datauristring')))
				aLink.href = url
				let date = new Date()
				let year = date.getFullYear()
				let month = (date.getMonth() + 1).toString().padStart(2, 0)
				let day = date.getDate().toString().padStart(2, 0)
				let hour = date.getHours().toString().padStart(2, 0)
				let minutes = date.getMinutes().toString().padStart(2, 0)
				let seconds = date.getSeconds().toString().padStart(2, 0)
				aLink.download = '保存的PDF文件-' + '.pdf'
				aLink.click()
				window.URL.revokeObjectURL(url)
			})
}
2.使用dom-to-image
<template>
  <div id="pdfDom" ref="pdfDom">
    // 此處存放界面中顯示的內(nèi)容區(qū)域,生成pdf的內(nèi)容區(qū)域......
  </div>
</template>

methods(){
  let node = document.getElementById('pdfDom');
			domtoimage.toJpeg(node, {
				width: node.clientWidth,
				height: node.clientHeight,
				cacheBust: true,
				style: {
					margin: 0,
					background: '#fff',
				}
			}).then(function (dataUrl) {
					console.log(node.clientWidth)
					that.canvasWidth = node.clientWidth;
					that.canvasHeight = node.clientHeight;
					let imgObj = new Image()
					imgObj.src = dataUrl;
					document.documentElement.scrollTop = 0
					//待圖片加載完后,將其顯示在canvas上
					imgObj.onload = function (img) {
						let canvas = document.getElementById("canvasDom");
						console.log(canvas.width, canvas.height, 'canvas.width')
						canvas.getContext("2d").drawImage(imgObj, 0, 0, that.canvasWidth, that.canvasHeight); //將圖片繪制到canvas中
						let contentWidth = canvas.width
						let contentHeight = canvas.height
						let pageHeight = contentWidth / 592.28 * 841.89
						let leftHeight = contentHeight
						let position = 0
						let imgWidth = 595.28
						let imgHeight = 592.28 / contentWidth * contentHeight
						let pageData = canvas.toDataURL('image/jpeg', 1.0)
						let PDF = new jsPDF('', 'pt', 'a4')
						if (leftHeight < pageHeight) {
							PDF.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight) // 大于1頁高度時分頁
						} else {
							while (leftHeight > 0) {
								PDF.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
								leftHeight -= pageHeight
								position -= 841.89
								if (leftHeight > 0) {
									PDF.addPage()
								}
							}
						}
						const aLink = document.createElement('a')
						document.body.appendChild(aLink)
						const url = URL.createObjectURL(that.toBlob(PDF.output('datauristring')))
						aLink.href = url
						let date = new Date()
						let year = date.getFullYear()
						let month = (date.getMonth() + 1).toString().padStart(2, 0)
						let day = date.getDate().toString().padStart(2, 0)
						let hour = date.getHours().toString().padStart(2, 0)
						let minutes = date.getMinutes().toString().padStart(2, 0)
						let seconds = date.getSeconds().toString().padStart(2, 0)
						aLink.download = '保存的PDF文件-' + '.pdf'
						aLink.click()
						window.URL.revokeObjectURL(url)
					}
					return dataUrl
				})
				.catch(function (error) {
					console.error('wrong!', error);
				});
}

到了這里,關(guān)于vue前端實現(xiàn)將頁面顯示內(nèi)容生成pdf文件的幾種方法,html2canvas、dom-to-image、jspdf(帶分頁)基本使用以及介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 使用Edge和chrom擴展工具(GoFullPage)實現(xiàn)整頁面截圖或生成PDF文件

    使用Edge和chrom擴展工具(GoFullPage)實現(xiàn)整頁面截圖或生成PDF文件

    插件GoFullPage下載:點擊免費下載 如果在瀏覽網(wǎng)頁時,有需要整個頁面截圖或?qū)С鯬DF文件的需求,這里分享一個Edge瀏覽器的擴展插件:GoFullPage。 這個工具可以一鍵實現(xiàn)頁面從上到下滾動并截取。 ?一、打開“管理擴展”(edge://extensions/),打開獲取Microsoft Edge擴展。 ?二、搜

    2024年02月12日
    瀏覽(37)
  • vue3前端實現(xiàn)全屏顯示,元素垂直填滿頁面

    1、 toggleFullscreen方法實現(xiàn)選定元素全屏展示 2、使用flex屬性+ flex-direction 實現(xiàn)垂直布局填滿整個頁面

    2024年01月16日
    瀏覽(32)
  • vue 純前端預(yù)覽pdf,純前端實現(xiàn)pdf加水印下載文件也帶水印,防止pdf下載

    vue 純前端預(yù)覽pdf,純前端實現(xiàn)pdf加水印下載文件也帶水印,防止pdf下載

    ? 原理:主要是利用pdfh5這個插件來完成的 ? 使用方法: ? 1.頁面需要有一個容器例子:div id=\\\"demo\\\"/div ? 2.下載pdfh5插件 npm install pdfh5 ? (注意:webpack5之后不會下載polyfill 需要手動下載 所以引入pdfh5的時候會報錯) ? 解決方案:下載 node-polyfill-webpack-plugin npm install node-polyfill-

    2024年04月15日
    瀏覽(129)
  • vue-pdf 單列顯示多個pdf頁面

    注意:文件要放在public文件夾下,不然會報錯:如果文件放在遠(yuǎn)程服務(wù)器上,則直接寫遠(yuǎn)程地址 Warning: Ignoring invalid character \\\"33\\\" in hex string\\\' 原因:讀取 PDF 文件時,路徑不合法,導(dǎo)致讀取不到文件; 在 vue-cli3 腳手架搭建的項目中,讀取本地的 PDF 文件需要放到 public 文件夾中

    2024年02月15日
    瀏覽(25)
  • vue中實現(xiàn)將頁面或者div內(nèi)容導(dǎo)出為pdf格式

    將Vue單頁面轉(zhuǎn)成pdf并下載 步驟1:下載對應(yīng)的庫 步驟2:創(chuàng)建一個htmlToPdf.js的js文件, 然后在main.js中全局引用一下,編寫如下代碼: 步驟三:在vue頁面中給需要打印的區(qū)域一個div標(biāo)簽,然后給div一個id,id名和htmlToPdf.js中選擇的名字一致,代碼如下: 步驟四:在data節(jié)點中聲明一

    2024年02月11日
    瀏覽(32)
  • VUE框架中實現(xiàn)HTML頁面(局部)內(nèi)容轉(zhuǎn)PDF下載

    有一朋友想把網(wǎng)頁內(nèi)容變成PDF下載下來。問我有沒有好辦法。 這還真巧了,咱公司也有這個需求,就是網(wǎng)頁生成合同,然后可以直接打印合同內(nèi)容。最早吧,就是可以直接打印就好了。 當(dāng)時為解決完美打印的問題,挺費勁的,當(dāng)時第三方插件還有BUG(當(dāng)然把解決放給發(fā)給作

    2023年04月14日
    瀏覽(14)
  • 【vue2】純前端實現(xiàn)本地的pdf/word/epub文件預(yù)覽

    需求是預(yù)覽本地的pdf/word/epub格式的文件,但是搜索后發(fā)現(xiàn)沒有可以直接使用的,格式不同,顯示的方式和效果也都略有不同。 最后還是 分別實現(xiàn)預(yù)覽 的功能。 如果只需要預(yù)覽pdf/word等格式的話,可以使用的方案:vue-office,支持多種文件(docx、excel、pdf)預(yù)覽的vue組件庫,支持

    2024年02月11日
    瀏覽(38)
  • vue3 如何將頁面生成 pdf 導(dǎo)出

    vue3 如何將頁面生成 pdf 導(dǎo)出

    原文鏈接:vue3 如何將頁面生成 pdf 導(dǎo)出 最近工作中有需要將一些前端頁面(如報表頁面等)導(dǎo)出為 pdf 的需求,博主采用的是 html2Canvas + jspdf 。 請閱讀 vue3 如何將頁面生成 pdf 導(dǎo)出

    2024年02月16日
    瀏覽(93)
  • 【vue2】純前端實現(xiàn)本地的pdf/word/epub文件預(yù)覽(包括pdf選中文字,epub高亮等)

    需求是預(yù)覽本地的pdf/word/epub格式的文件,但是搜索后發(fā)現(xiàn)沒有可以直接使用的,格式不同,顯示的方式和效果也都略有不同。 最后還是 分別實現(xiàn)預(yù)覽 的功能。 如果只需要預(yù)覽pdf/word等格式的話,可以使用的方案:vue-office,支持多種文件(docx、excel、pdf)預(yù)覽的vue組件庫,支持

    2024年02月11日
    瀏覽(32)
  • vue 頁面內(nèi)容生成圖片\PFD方法

    vue 頁面內(nèi)容生成圖片\PFD方法

    1.下載插件 2.引入 3.使用方法 在需要生成的內(nèi)容綁定類名或id,在下面獲取元素 js? less樣式? ?效果 ?點擊生成圖片或pdf 圖片沒有寬高大小限制 pdf寬度大概800px,長度也有限制,不建議使用pdf

    2024年01月17日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包