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

如何使用html2pdf.js生成pdf文件詳解

 更新時(shí)間:2025年04月02日 11:27:09   作者:xiaoliyo_  
html2pdf.js是基于html2canvas和jsPDF的輕量級(jí)庫(kù),可以在客戶端實(shí)現(xiàn)網(wǎng)頁(yè)到PDF的轉(zhuǎn)換,這篇文章主要介紹了如何使用html2pdf.js生成pdf文件的相關(guān)資料,需要的朋友可以參考下

需求場(chǎng)景

1. vue2 + elment ui + echarts
2. 生成pdf需要 隱式處理(不需要用戶操作)
3. pdf數(shù)據(jù)量過(guò)多需要分頁(yè),處理頁(yè)眉頁(yè)腳
4. 頁(yè)面由多個(gè)組件組成,數(shù)據(jù)量過(guò)大需要全部渲染完再進(jìn)行pdf生成

需求實(shí)現(xiàn)

1. 技術(shù)棧:通過(guò)html2pdf.js直接轉(zhuǎn)pdf,不需要通過(guò)html2canvas和pdf.js進(jìn)行二次操作
2. mounted里面再進(jìn)行定時(shí)器調(diào)用生成 pdf 方法做到隱式生成

html2pdf.js

html2pdf就是html2canvas和pdf的集成,具體配置項(xiàng)可以看這個(gè)配置項(xiàng)文檔,看不懂英文可以點(diǎn)擊瀏覽器自帶翻譯成中文。

html2pdf.js使用

  • 第一步:下載html2pdf.js

npm install --save html2pdf.js 或者 yarn add html2pdf.js

  • 第二步:引入項(xiàng)目
import html2pdf from 'html2pdf.js'
 downloadPDF() {
      console.log('生成pdf')
      const element = document.getElementById('report') // 獲取報(bào)告的DOM元素
      // 設(shè)置打印選項(xiàng)
      const options = {
        margin: 1, // 內(nèi)邊距
        filename: '評(píng)估報(bào)告.pdf', // pdf文件名字
        image: { type: 'jpeg', quality: 0.98 }, // 生成圖片的類型以及清晰度
        pagebreak: { mode: 'avoid-all', before: '#page2el' }, // 處理是否元素分割
       //元素分割:就是分頁(yè)的時(shí)候,會(huì)將圖表、文字等元素分割成倆塊,這里avoid-all是所有元素都不被分割
        html2canvas: { scale: 2 },
        jsPDF: { unit: 'cm', format: 'a4', orientation: 'portrait' }
      }

      // 生成PDF
      html2pdf()
        .from(element)
        .set(options)
        .output('blob') // 將輸出設(shè)置為Blob
        .then((blob) => {
          // 創(chuàng)建一個(gè)鏈接元素
          console.log('blob :>> ', blob)
          const url = URL.createObjectURL(blob)
          try {
            let file = this.transBlobFilrToFile(blob)
            console.log('file :>> ', file)
            // 這里可以將文件進(jìn)行處理,上傳pdf到服務(wù)器
          } catch (e) {
            console.log(e)
          }
        })
    },

全部代碼

<div class="afour" id="report" @load="downloadPDF">
  <div class="afour_header" style="width: 100%;display: flex;flex-direction: column;">
   <div class="afour_header_span" style="display: flex;justify-content: space-between;">
     <p class="afour_header_p" style=" 
     	margin: 5px;
   		display: flex;
   		justify-content: center;
  		text-align: center;
   		font-size: 24px;
   		box-sizing: border-box;
   		flex: 1;">
        評(píng)估報(bào)告
      </p>
    <el-divider></el-divider>
  </div>
  <!--都是一些圖表和echarts組件 通過(guò)綁定的 Data 進(jìn)行傳值-->
  <basic-vue :basicData='basicData' class="no-break"></basic-vue>
  <now-assessment-vue :nowData='nowData' class="no-break"></now-assessment-vue>
  <health-item-vue :healthData='healthData' class="no-break"></health-item-vue>
  <table-com-vue :tableData="waijianTableData" class="no-break"></table-com-vue>
  <table-com-vue :tableData="yiconxingTableData" class="no-break"></table-com-vue>
  <notice-text-vue :textData='textData' class="no-break"></notice-text-vue>
  <notice-text-vue :textData='noticeTextData' class="no-break"></notice-text-vue>
  <div class="footer">頁(yè)腳---------------------</div>
</div>

<script>
import html2pdf from 'html2pdf.js'
import basicVue from './reportCom/basic.vue'
import healthItemVue from './reportCom/health-item.vue'
import nowAssessmentVue from './reportCom/now-assessment.vue'
import tableComVue from './reportCom/table-com.vue'
import noticeTextVue from './reportCom/notice-text.vue'

export default {
	name:"",
	components: { basicVue, nowAssessmentVue, healthItemVue, tableComVue, noticeTextVue },
	data() {
    return {
      basicData: {},
      nowData: {},
      healthData: [],
      waijianTableData: {},
      yiconxingTableData: {},
      textData: {},
      noticeTextData: {},
    },
    methods:{
    -------
    //其他方法
    -------
    downloadPDF() {
      console.log('生成pdf')
      const element = document.getElementById('report') // 獲取報(bào)告的DOM元素
      // 設(shè)置打印選項(xiàng)
      const options = {
        margin: 1, // 內(nèi)邊距
        filename: '評(píng)估報(bào)告.pdf', // pdf文件名字
        image: { type: 'jpeg', quality: 0.98 }, // 生成圖片的類型以及清晰度
        pagebreak: { mode: 'avoid-all', before: '#page2el' }, // 處理是否元素分割
       //元素分割:就是分頁(yè)的時(shí)候,會(huì)將圖表、文字等元素分割成倆塊,這里avoid-all是所有元素都不被分割
        html2canvas: { scale: 2 },
        jsPDF: { unit: 'cm', format: 'a4', orientation: 'portrait' }
      }

      // 生成PDF
      html2pdf()
        .from(element)
        .set(options)
        .output('blob') // 將輸出設(shè)置為Blob
        .then((blob) => {
          // 創(chuàng)建一個(gè)鏈接元素
          console.log('blob :>> ', blob)
          const url = URL.createObjectURL(blob)
          try {
            let file = this.transBlobFilrToFile(blob)
            console.log('file :>> ', file)
            // 這里可以將文件進(jìn)行處理,上傳pdf到服務(wù)器
          } catch (e) {
            console.log(e)
          }
        })
    },
    }
    mounted() { 
		setTimeout(()=>{
			this.downloadPDF()
		}.500)
	},
  },

}
</script>

問題

  • mounted處理需要是從別的頁(yè)面跳轉(zhuǎn)過(guò)來(lái)這個(gè)頁(yè)面才可以生效,那如果是在原基礎(chǔ)頁(yè)面彈窗出這個(gè)頁(yè)面,怎么樣才能保險(xiǎn)生成pdf呢?求告知~

總結(jié) 

到此這篇關(guān)于如何使用html2pdf.js生成pdf文件的文章就介紹到這了,更多相關(guān)html2pdf.js生成pdf文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ES6學(xué)習(xí)筆記之正則表達(dá)式和字符串正則方法分析

    ES6學(xué)習(xí)筆記之正則表達(dá)式和字符串正則方法分析

    這篇文章主要介紹了ES6學(xué)習(xí)筆記之正則表達(dá)式和字符串正則方法,結(jié)合實(shí)例形式對(duì)比分析了ES5與ES6正則操作的常用函數(shù)功能與用法區(qū)別,需要的朋友可以參考下
    2017-04-04
  • IE與Firefox在JavaScript上的7個(gè)不同寫法小結(jié)

    IE與Firefox在JavaScript上的7個(gè)不同寫法小結(jié)

    盡管那需要用長(zhǎng)串的、沉悶的不同分支代碼來(lái)應(yīng)付不同瀏覽器的日子已經(jīng)過(guò)去,偶爾還是有必要做一些簡(jiǎn)單的區(qū)分和目標(biāo)檢測(cè)來(lái)確保某塊代碼能在用戶的機(jī)器上正常運(yùn)行。
    2009-09-09
  • JavaScript將坐標(biāo)字符串轉(zhuǎn)為數(shù)組的項(xiàng)目實(shí)踐

    JavaScript將坐標(biāo)字符串轉(zhuǎn)為數(shù)組的項(xiàng)目實(shí)踐

    本文主要介紹了JavaScript將坐標(biāo)字符串轉(zhuǎn)為數(shù)組的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • D3.js實(shí)現(xiàn)餅狀圖的方法詳解

    D3.js實(shí)現(xiàn)餅狀圖的方法詳解

    相信大家都知道圖表是數(shù)據(jù)圖形化的表示,通過(guò)形象的圖表來(lái)展示數(shù)據(jù),比如條形圖,折線圖,餅圖等??梢暬瘓D表可以幫助開發(fā)者更容易理解復(fù)雜的數(shù)據(jù),提高生產(chǎn)的效率和Web應(yīng)用和項(xiàng)目的可靠性?,F(xiàn)在就讓我們大家一起來(lái)學(xué)習(xí)用D3.js來(lái)實(shí)現(xiàn)餅圖的方法,有需要的可以參考借鑒。
    2016-09-09
  • 用JS動(dòng)態(tài)改變表單form里的action值屬性的兩種方法

    用JS動(dòng)態(tài)改變表單form里的action值屬性的兩種方法

    下面小編就為大家?guī)?lái)一篇用JS動(dòng)態(tài)改變表單form里的action值屬性的兩種方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-05-05
  • JavaScript事件委托實(shí)例分析

    JavaScript事件委托實(shí)例分析

    這篇文章主要介紹了JavaScript事件委托的用法,以實(shí)例形式分析了javascript事件委托的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2015-05-05
  • 微信小程序中遇到的iOS兼容性問題小結(jié)

    微信小程序中遇到的iOS兼容性問題小結(jié)

    這篇文章主要給大家介紹了關(guān)于微信小程序中遇到的一些iOS兼容性問題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • 如何通過(guò)setTimeout理解JS運(yùn)行機(jī)制詳解

    如何通過(guò)setTimeout理解JS運(yùn)行機(jī)制詳解

    這篇文章主要給大家介紹了關(guān)于如何通過(guò)setTimeout理解JS運(yùn)行機(jī)制的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Javascript實(shí)現(xiàn)滾動(dòng)圖片新聞的實(shí)例代碼

    Javascript實(shí)現(xiàn)滾動(dòng)圖片新聞的實(shí)例代碼

    這篇文章主要介紹了Javascript實(shí)現(xiàn)滾動(dòng)圖片新聞的實(shí)例代碼。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-11-11
  • JS Input里添加小圖標(biāo)的兩種方法

    JS Input里添加小圖標(biāo)的兩種方法

    大家在做網(wǎng)站的時(shí)候,經(jīng)常需要在input里面添加小圖標(biāo)功能,看似功能很簡(jiǎn)單,但是實(shí)現(xiàn)起來(lái)還是有點(diǎn)技巧的,下面小編給大家介紹下JS Input里添加小圖標(biāo)的兩種方法,需要的朋友參考下吧
    2017-11-11

最新評(píng)論

鸡泽县| 亳州市| 南岸区| 台南县| 隆尧县| 江津市| 苍南县| 闽侯县| 朝阳区| 定远县| 浦江县| 来宾市| 通道| 宜都市| 北宁市| 陆河县| 宁阳县| 循化| 延庆县| 钟山县| 遂昌县| 宣城市| 扎鲁特旗| 临沭县| 黑龙江省| 林西县| 潞城市| 乡城县| 江西省| 邵阳县| 汶川县| 宁津县| 城市| 运城市| 合川市| 临高县| 定结县| 乐业县| 鄱阳县| 报价| 文成县|