亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

需求場景

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

需求實現

1. 技術棧:通過html2pdf.js直接轉pdf,不需要通過html2canvas和pdf.js進行二次操作
2. mounted里面再進行定時器調用生成 pdf 方法做到隱式生成

html2pdf.js

html2pdf就是html2canvas和pdf的集成,具體配置項可以看這個配置項文檔,看不懂英文可以點擊瀏覽器自帶翻譯成中文。

html2pdf.js使用

  • 第一步:下載html2pdf.js

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

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

      // 生成PDF
      html2pdf()
        .from(element)
        .set(options)
        .output('blob') // 將輸出設置為Blob
        .then((blob) => {
          // 創(chuàng)建一個鏈接元素
          console.log('blob :>> ', blob)
          const url = URL.createObjectURL(blob)
          try {
            let file = this.transBlobFilrToFile(blob)
            console.log('file :>> ', file)
            // 這里可以將文件進行處理,上傳pdf到服務器
          } 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>
    <el-divider></el-divider>
  </div>
  <!--都是一些圖表和echarts組件 通過綁定的 Data 進行傳值-->
  <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">頁腳---------------------</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') // 獲取報告的DOM元素
      // 設置打印選項
      const options = {
        margin: 1, // 內邊距
        filename: '評估報告.pdf', // pdf文件名字
        image: { type: 'jpeg', quality: 0.98 }, // 生成圖片的類型以及清晰度
        pagebreak: { mode: 'avoid-all', before: '#page2el' }, // 處理是否元素分割
       //元素分割:就是分頁的時候,會將圖表、文字等元素分割成倆塊,這里avoid-all是所有元素都不被分割
        html2canvas: { scale: 2 },
        jsPDF: { unit: 'cm', format: 'a4', orientation: 'portrait' }
      }

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

}
</script>

問題

  • mounted處理需要是從別的頁面跳轉過來這個頁面才可以生效,那如果是在原基礎頁面彈窗出這個頁面,怎么樣才能保險生成pdf呢?求告知~

總結 

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

相關文章

  • 通過action傳過來的值在option獲取進行驗證的方法

    通過action傳過來的值在option獲取進行驗證的方法

    通過action傳過來的值在option獲取進行驗證,下面有個不錯的示例,需要的朋友不要錯過
    2013-11-11
  • JavaScript針對SPA應用的前端優(yōu)化策略概述

    JavaScript針對SPA應用的前端優(yōu)化策略概述

    前端性能優(yōu)化是Web開發(fā)中非常重要的一環(huán),優(yōu)化能夠有效地提高網站的加載速度和用戶體驗,而對于SPA來說,由于其特殊的加載方式和數據交互方式,其優(yōu)化策略也具有一定的特殊性,需要詳細了解可以參考下文
    2023-05-05
  • firefox事件處理之自動查找event的函數(用于onclick=foo())

    firefox事件處理之自動查找event的函數(用于onclick=foo())

    在ie中,事件對象是作為一個全局變量來保存和維護的。 所有的瀏覽器事件,不管是用戶觸發(fā)的,還是其他事件, 都會更新window.event 對象。
    2010-08-08
  • uniapp手機號一鍵登錄實現保姆級教程(含前端和后端)

    uniapp手機號一鍵登錄實現保姆級教程(含前端和后端)

    這篇文章主要介紹了uniapp手機號一鍵登錄實現的相關資料,本文指導如何創(chuàng)建uniapp項目、關聯uniCloud云空間,并配置一鍵登錄功能,,整個過程涉及創(chuàng)建云開發(fā)環(huán)境、關聯云服務空間、配置登錄服務和編寫云函數,需要的朋友可以參考下
    2024-10-10
  • js重寫alert事件(避免alert彈框標題出現網址)

    js重寫alert事件(避免alert彈框標題出現網址)

    這篇文章主要給大家介紹了關于js重寫alert事件的相關資料,這樣可以避免alert彈框標題出現網址的情況,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • JavaScript實現全選取消效果

    JavaScript實現全選取消效果

    這篇文章主要為大家詳細介紹了JavaScript實現全選取消效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • JavaScript如何將數據處理成樹形結構

    JavaScript如何將數據處理成樹形結構

    這篇文章主要介紹了JavaScript如何將數據處理成樹形結構問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Bootstrap每天必學之折疊

    Bootstrap每天必學之折疊

    Bootstrap每天必學之折疊,本文向大家講解了Bootstrap折疊操作,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 談一談bootstrap響應式布局

    談一談bootstrap響應式布局

    這篇文章主要和大家談一談bootstrap響應式布局,本教程講解如何在網頁布局中應用響應式設計,感興趣的小伙伴們可以參考一下
    2016-05-05
  • JS生態(tài)系統加速npm腳本優(yōu)化及性能分析探索

    JS生態(tài)系統加速npm腳本優(yōu)化及性能分析探索

    這篇文章主要為大家介紹了JS生態(tài)系統加速npm腳本優(yōu)化及性能分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01

最新評論