整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          通過html2canvas+jspdf將html頁面生成PDF下載

          里講一種實現起來比較簡單的html轉pdf下載的實現。

          依賴插件

          html2canvas jspdf

          思路

          通過html2canvas,我們可以將指定的一個dom元素,渲染到canvas中,然后從canva中獲得該圖片,并將圖片通過jspdf來生成。

          代碼

          function createPdf (selector,pagesize,direction,title){
              var key = pagesize +''+direction;
              var settings = {
                  '00' : {
                      pdf : {orientation : 'portrait',format : 'a4',unit : 'px'},
                      width : 448,
                      height : 632.5
                  },
                  '01' : {
                      pdf : {orientation : 'landscape',format : 'a4',unit : 'px'},
                      width : 632.5,
                      height : 448
                  },
                  '10' : {
                      pdf : {orientation : 'portrait',format : 'a3',unit : 'px'},
                      width : 632.5,
                      height : 894.2
                  },
                  '11' : {
                      pdf : {orientation : 'landscape',format : 'a3',unit : 'px'},
                      width : 894.2,
                      height : 632.5
                  }
              };
              var set = settings[key];
              var doc = new jsPDF(set.pdf);
              var arr = [];//根據順序保存
              var $arr = $(selector);
              function tempCreate(){
                  if($arr.length == 0){//沒有啦
                      //執行生成
                      tempPdf();
                  }else{
                      var $dom = $arr.splice(0,1);
                      html2canvas($dom[0]).then(canvas => {
                          var dataurl = canvas.toDataURL('image/png');
                          arr.push(dataurl);
                          tempCreate();
                      });
                  }
              }
              function tempPdf(){
                  arr.forEach((item,i)=>{
                      if(i !== 0){
                          doc.addPage();
                      }
                      doc.addImage(item,'png',-1,-1,set.width,set.height);//根據不同的寬高寫入
                  })
                  //根據當前的作業名稱
                  doc.save(title+'.pdf');
              }
              tempCreate();
          }

          需要指定容器(依賴jquery),然后指定紙張A4或 A3,以及橫縱向。

          //調用
          createPdf('.single-page',0,0,'test')

          當然,如果是數據量很大的話,就不建議在前臺生成了,最好還是放在后端去做。個人測試過,做A4的圖片生成PDF,當數量大約在100左右的時候,瀏覽器就崩潰了,如果只是幾頁的數據的話,這個方式還是很方便的。

          Ps:瀏覽器要是現代瀏覽器哈。

          參考資料

          html2canvas : http://html2canvas.hertzen.com/ jspdf :https://github.com/MrRio/jsPDF

          載PDF或excel有很多方法,Excel很簡單,但是PDF通常在CSS和其他很多方面有問題。我對此做了更多的研究,發現使用CutyCapt.exe將網頁捕獲為PDF或圖像更方便。

          CutyCapt是什么?

          CutyCapt是一個小型的跨平臺命令行工具,用于捕獲WebKit將web頁面呈現為各種矢量和位圖格式的方法,包括SVG、PDF、PS、PNG、JPEG、TIFF、GIF和BMP。請參閱IECapt以獲取基于Internet Explorer的類似工具。

          要求

          1. 創建PDF的過程是使用一個名為CutyCapt.exe的可執行文件來完成的,下載exe并將其添加到解決方案中。
          2. 如果我們使用ASP.NET創建項目時,可在重定向頁面上調用exe,這個頁面將是空白的,在頁面加載中有以下代碼。

          實現

          1. 創建一個文件名和路徑:為了使文件名唯一,我更推薦使用GUID(這是開發人員根據需求和邏輯做出的選擇),然后將文件URL添加到一個字符串中。
          string filename = Guid.NewGuid() + ".pdf"; //unique file name  
          // url of the pdf file name   
          string url = “http://example.org” +"/CutyCapt/" + filename; 
          1. 可執行文件的位置:cutycap.exe的位置被分配給一個字符串。
          //location of Executable  
          string cutycaptLocation = "D:\\CutyCapt";  
          1. 命令創建:用于在ASP中創建命令。NET中,我們使用ProcessStartInfo對象。將不同的參數作為屬性賦給對象,如下所示:

          a. CreateNoWindow
          b. WorkingDirectory
          c. FileName
          d. Arguments
          - 需要轉換成PDF格式的網頁鏈接
          - 目標文件夾
          e. UseShellExecute

          // Command for execution   
          System.Diagnostics.ProcessStartInfo pi = new System.Diagnostics.ProcessStartInfo();  
          pi.CreateNoWindow = false;  
          pi.WorkingDirectory = cutycaptLocation;  
          pi.FileName = cutycaptLocation + "\\CutyCapt.exe";  
          pi.Arguments = "--url=" + link + " --out-format=pdf -out=" + System.IO.Path.GetFullPath(Server.MapPath("~/CutyCapt")) + "\\" + filename;  
          pi.UseShellExecute = false;
          1. 進程執行:ASP中的進程對象.Net用于執行進程,以獲取創建的信息。
          try {  
              // Start the process with the info we specified.   
              // Call WaitForExit and then the using statement will close.   
              using(System.Diagnostics.Process exeProcess = System.Diagnostics.Process.Start(pi)) {  
                  exeProcess.WaitForExit();  
              }  
          }   
          catch (Exception ex)   
          {  
              Response.Write(ex.Message);  
          }
          1. 重定向到PDF:創建PDF后,瀏覽器會重定向到加載創建的PDF的PDF鏈接。
          Response.Redirect(url); 

          何下載網頁圖片

          用過天貓,圖蟲的人都知道,網頁中的圖片是無法下載的。即使你打開網頁,進入圖片,長按是沒法顯示“保存圖片”一類的提示。

          圖蟲網頁也一樣,長按圖片沒有任何顯示

          為什么會出現這種情況,我搜索相關資料得知,原來是網站為了防止盜圖或者保護版權就在網頁中嵌入了一個名為“ javascript”的腳本。這種腳本能禁止讀者在平板電腦、pc、手機端預覽圖片的時候禁止保存,無法下載到本地。

          怎么解決這個問題?搜索了很多資料,像審核元素、qq截圖、 DownloadbyNetAnts、 WebCatcher。基本都是pc端用的,有的軟件這是針對電腦開發。現在這個時代,手機能用的就不需要電腦,對于普通用戶來說根本沒有用,或者說不好用難以上手。

          方法還是有的,電腦上都是使用360瀏覽器和谷歌chrome瀏覽器可以解決網頁不能下載圖片的問題。但是360和chrome占用內存太大,不推薦使用。這里推薦比較實在的瀏覽器…………qq瀏覽器國際版,手機樂園和酷安都有。

          依次下載qq瀏覽器play版和uc瀏覽器,之所以推薦這兩個瀏覽器是因為uc最好用、最順手。qq瀏覽器國際版運行速度快,網速最快。兩者配合基本上用不著其他第三方瀏覽器了。

          安裝完畢后,先打開uc瀏覽器,這里先以阿里巴巴旗下的天貓為主。因為天貓的有圖評論就沒法保存圖片,先去天貓找到你要下載的圖片地址,按住地址欄把圖片地址復制下來。

          需要注意的是,先把uc瀏覽器的ua改成chrome或者電腦模式,刷新后,再進入天貓復制那張要保存的圖片地址。

          進入qq瀏覽器同樣先把ua改成電腦版,我說的是電腦模式而不是iPad。因為iPad模式和電腦模式的排版不一樣,有的功能用不上,所以用電腦模式保險。

          在qq瀏覽器國際版的地址欄,把剛才復制下來的圖片地址粘貼上去刷新網頁。找到你要下載的圖片,點擊展示原圖,長按圖片有沒有看到出現了“查看圖片”和“保存圖片”兩個選項。

          圖蟲網頁能正常顯示也能下載圖片了

          接下來,去快圖瀏覽或者系統自帶圖庫找到“圖片收藏”的文件,這個就是qq瀏覽器國際版保存在本地圖片的目錄。

          此方法親自測試有用。看圖:


          主站蜘蛛池模板: 精品成人av一区二区三区| 国产麻豆剧果冻传媒一区| 人妻少妇精品视频一区二区三区| 秋霞鲁丝片一区二区三区| 国产精品久久久久久一区二区三区| 亚洲综合av一区二区三区不卡| 中文无码一区二区不卡αv| 国产微拍精品一区二区| 日本精品一区二区在线播放| 亚洲国产高清在线一区二区三区 | 国产在线精品一区二区在线观看| 一区二区视频传媒有限公司| 91在线一区二区| 国产精品成人免费一区二区| 日本韩国黄色一区二区三区| 国产精品无圣光一区二区| 亚洲AV无码一区二区三区性色 | 日本一区二区三区在线视频| 国产亚洲无线码一区二区| 亚洲一区二区三区在线观看蜜桃| 日本一区中文字幕日本一二三区视频 | 一区视频免费观看| 韩国一区二区三区视频| 怡红院美国分院一区二区| 一区一区三区产品乱码| 亚洲国产欧美国产综合一区| 国产对白精品刺激一区二区| 亚洲国产日韩一区高清在线| 无码囯产精品一区二区免费| 一区二区视频在线| 91一区二区在线观看精品| 亚洲va乱码一区二区三区| 精品深夜AV无码一区二区老年| 竹菊影视欧美日韩一区二区三区四区五区 | 亚洲一区二区三区成人网站| 亚洲av成人一区二区三区观看在线 | 在线免费一区二区| 无码8090精品久久一区| 中文字幕一区二区三区有限公司| 亚洲一区二区三区在线观看精品中文 | 亚洲乱码日产一区三区|