91网首页-91网页版-91网在线观看-91网站免费观看-91网站永久视频-91网站在线播放

      LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
       
      網站管理員

      【JavaScript 】純JS實現html生成導出保存為PDF文件

      admin
      2023年5月15日 19:8 本文熱度 1503

       相信各位前端工程獅們在一些報表項目,管理系統項目中都會遇到在這樣的需求:申請報、表格、簡歷等等圖文信息有導出為PDF文件。下面是記錄我在項目中完成該需求的代碼dome,發布出來也是希望對大家有些幫助。

      1,整體思路

      將HTML元素打印或導出為PDF文件,無非就是提取元素頁面內容,然后轉化為圖片,將圖片保存為PDF文件。

      2,準備工作

      將HTML元素轉化為圖片:html2canvas.js  插件;

      <script src="https://cdn.bootcss.com/html2canvas/0.5.0-beta4/html2canvas.js"></script>

      導出為PDF文件:jspdf.js插件:

      <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.0.272/jspdf.debug.js"></script>

      3,dome

      HTML:

          <button id="btn">導出為PDF文件</button>
          <div id="pdfDom">
              <table>
                  <th></th>
              </table>
              <ul id="box"></ul>
          </div>

      Javascript:

      <script>
          let obox = document.getElementById("box")
          let opdfdom = $("#pdfDom")    
          let obtn = document.getElementById("btn")    
          let lihtml = ''    
          for(let i = 0; i < 50; i++){        
          lihtml += "<li>條目"+i+"</li>"    }    
          obox.innerHTML = lihtml    
          obtn.onclick = function(){        
          downLoadPdf(opdfdom)    
          }    
          function downLoadPdf(content){        
          content = content ? content : null;        
          // 條件判斷是否打印        
          if(!content){            
          alert("打印失敗,請重新操作")            
          return false        
          }        
          // 開始打印        
          console.log(content)        
          var contentWidth = content.width();        
          var contentHeight = content.height();        
          var canvas = document.createElement("canvas")        
          canvas.width = contentWidth        
          canvas.height = contentHeight        
          var context = canvas.getContext("2d");        
          html2canvas(content,{            
          allowTaint:true,            
          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()                    
          }                
          }            
          }            
          pdf.save("案例.pdf")        
          })    
          }
      </script>

      4,結果


      該文章在 2023/5/15 19:08:54 編輯過

      全部評論1

      admin
      2023年5月15日 19:11
       <script src="js/html2canvas.min.js" type="text/javascript" charset="utf-8"></script>
      <script src="js/jspdf.debug.js" type="text/javascript" charset="utf-8"></script>
      
      document.getElementById("savePdf").onclick = function() {
          html2canvas(document.getElementById("tabContainer"), {
              onrendered: function(canvas) {
                  //通過html2canvas將html渲染成canvas,然后獲取圖片數據
                  var pageData = canvas.toDataURL('image/jpeg', 1.0);
                  var pdfWidth = 210;
                  const pdf = new jspdf('p', 'mm', 'a4');
                  pdf.addImage(pageData, 'JPEG', 25, 25, pdfWidth - 50, ((pdfWidth - 50) / canvas.width) * canvas.height);
                  // 保存
                  pdf.save(`fileName.pdf`);
              }
          });
      }
      

      關鍵字查詢
      相關文章
      正在查詢...
      點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
      點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
      點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
      點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
      Copyright 2010-2025 ClickSun All Rights Reserved

      主站蜘蛛池模板: 91福利院在线观看 | 成人九九 | 成人一区专区在 | 黑人一级| 玖玖爱电影韩国午夜 | 乱码国产精品 | 欧美日韩一区四区 | 91丝袜美腿高跟国 | 福利色导航 | 国产又粗又猛又 | 日韩网友自拍区 | 日韩精品视频美在 | 绿帽夫妻AV一级 | 国产稀缺资源在线播 | 国产情侣91 | 日韩在线高清 | 国产免费毛不卡片 | 国产欧美大片一区 | 中文字幕无吗热视频 | 日本三级在线 | 国产日韩综合色 | 日韩一区二区在线 | www.亚洲欧美 | 国产在线97免费观 | 无码久久综合免费 | 欧洲乱码伦视频免费 | 不卡国产一区 | 国产v一区二区综合 | 成人高清在线视频 | 国产刺激在线观看 | 精品国产免费1区 | 中文字幕在 | 国产自产在线 | 99热在线播放 | 三级特黄60 | 国产亚洲h网 | 国产精品午夜福利 | 成人奭片免费观看 | 国产91色在线 | 成人午夜资源站 | 91污污|