六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

js完成html轉換pdf

[摘要]在項目開發的時候,我們偶爾或者是經常會遇到一些難題,關于用js吧html頁面轉換成pdf也是一個難題,意思是說相當于把整個頁面截下來,然后保存成pdf。其實,能夠實現html轉pdf的方法還是挺多的,大概有以下幾種:1、大部分瀏覽器就有這個功能。然而我們客戶要的可不是這個,人家要的是能夠在系統中主...
在項目開發的時候,我們偶爾或者是經常會遇到一些難題,關于用js吧html頁面轉換成pdf也是一個難題,意思是說相當于把整個頁面截下來,然后保存成pdf。

其實,能夠實現html轉pdf的方法還是挺多的,大概有以下幾種:

1、大部分瀏覽器就有這個功能。然而我們客戶要的可不是這個,人家要的是能夠在系統中主動觸發的導出為pdf功能,所以這種方案pass。

2、利用第三方工具。我找到了一種利用wkhtmltopdf這種工具來導出的方案,自己在我們的項目中試了一下,效果不好,而且對svg圖片的支持也不行。pass。

3、還有一種是利用iText類后臺生成java文件。但因為需要導出的這個頁面是動態頁面,而且直接把頁面傳給后臺會丟失大量樣式,所以還是pass。

最后沒什么好的辦法,只能退而求其次,想著要不先把html頁面轉成圖片,再把圖片導出為pdf。因為要支持用戶導出下載,而且要保留樣式,所以最好是純js前端實現。

html轉canvas的話,就用html2canvas這個js,這個網上介紹比較多了,這里就不廢話了。

比較麻煩的是svg圖片,直接用html2canvas無法把svg標簽的內容轉成canvas,最后查了一圈資料后,鎖定了canvg這個js。canvg是谷歌的一個插件,可以將svg標簽內容轉成canvas。具體到我們的項目,還有一個難點,就是如何把glyphicons這種字體圖標也轉成canvas,因為在不同瀏覽器下對這種字體圖標的支持是完全不一樣的。最后找到的方法是用char code來替換這些字體圖標,重新繪制成canvas。由canvas生成圖片不用廢話。由圖片生成pdf用jsPDF實現。 折騰了大半天,總算把整個流程打通了,接下來一步一步貼上代碼。

第一步:把對應dom節點里所有的svg元素替換成canvas

svg2canvas: function(targetElem) {
  var svgElem = targetElem.find('svg');
  svgElem.each(function(index, node) {
    var parentNode = node.parentNode;
    //由于現在的IE不支持直接對svg標簽node取內容,所以需要在當前標簽外面套一層div,通過外層div的innerHTML屬性來獲取
    var tempNode = document.createElement('div');
    tempNode.appendChild(node);
    var svg = tempNode.innerHTML;
    var canvas = document.createElement('canvas');
    //轉換
    canvg(canvas, svg);
    parentNode.appendChild(canvas);
  });
}

第二步:把glyphicons字體轉成canvas。如果項目中沒有用到glyphicons字體圖標,可忽略這一步

glyphicons2canvas: function(targetElem, fontClassName, fontFamilyName) {
  var iconElems = targetElem.find('.' + fontClassName);
  iconElems.each(function(index, inconNode) {
    var fontSize = $(inconNode).css("font-size");
    var iconColor = $(inconNode).css("color");
    var styleContent = $(inconNode).attr('style');
    //去掉"px"
    fontSize = fontSize.replace("px", "");
    var charCode = getCharCodeByGlyphiconsName(iconName);
    var myCanvas = document.createElement('canvas');
    //把canva寬高各增加2是為了顯示圖標完整
    myCanvas.width = parseInt(fontSize) + 2;
    myCanvas.height = parseInt(fontSize) + 2;
    myCanvas.style = styleContent;
    var ctx = myCanvas.getContext('2d');
    //設置繪圖內容的顏色
    ctx.fillStyle = iconColor;
    //設置繪圖的字體大小以及font-family的名字
    ctx.font = fontSize + 'px ' + fontFamilyName;
    ctx.fillText(String.fromCharCode(charCode), 1, parseInt(fontSize) + 1);
    $(inconNode).replaceWith(myCanvas);
  });
}
//根據glyphicons/glyphicon圖標的類名獲取到對應的char code
getCharCodeByGlyphiconsName: function(iconName) {
  switch (iconName) {
  case("glyphicons-resize-full"):
    return "0xE216";
  case ("glyphicons-chevron-left"):
    return "0xE225";
  default:
    return "";
  }
  }

第三步:html轉canvas轉圖片再轉pdf。

html2canvas($("#myExportArea"), {
  onrendered: function(canvas) {
    var imgData = canvas.toDataURL('image/jpeg');
    var img = new Image();
    img.src = imgData;
    //根據圖片的尺寸設置pdf的規格,要在圖片加載成功時執行,之所以要*0.225是因為比例問題
    img.onload = function() {
      //此處需要注意,pdf橫置和豎置兩個屬性,需要根據寬高的比例來調整,不然會出現顯示不完全的問題
      if (this.width > this.height) {
        var doc = new jsPDF('l', 'mm', [this.width * 0.225, this.height * 0.225]);
      } else {
        var doc = new jsPDF('p', 'mm', [this.width * 0.225, this.height * 0.225]);
      }
      doc.addImage(imgData, 'jpeg', 0, 0, this.width * 0.225, this.height * 0.225);
      //根據下載保存成不同的文件名
      doc.save('report_pdf_' + new Date().getTime() + '.pdf');
    }
  },
  background: "#fff",
  //這里給生成的圖片默認背景,不然的話,如果你的html根節點沒設置背景的話,會用黑色填充。
  allowTaint: true //避免一些不識別的圖片干擾,默認為false,遇到不識別的圖片干擾則會停止處理html2canvas
});

雖然這種方法可以將html頁面轉換成pdf樣式,但是生成的pdf效果明顯不如正常截圖來的清晰,如果大家有更好的辦法,歡迎指點。

相關推薦:

C#怎么將 HTML轉換為圖片或 PDF?

關于C#如何將Word轉換成PDF的方法匯總

使用HTML生成一個PDF實例代碼

以上就是js實現html轉成pdf的詳細內容,更多請關注php中文網其它相關文章!


網站建設是一個廣義的術語,涵蓋了許多不同的技能和學科中所使用的生產和維護的網站。




主站蜘蛛池模板: 婷婷影院在线观看 | 日本福利片国产午夜久久 | 亚洲欧洲日本在线观看 | 在线亚洲综合 | 日韩欧美网 | 色播影视 | 亚洲第一精品夜夜躁人人爽 | 日韩小视频在线播放 | 中文字幕在线视频不卡 | 亚洲国产一区二区在线 | 人禽交在线视频免费播放 | 日日夜夜天天久久 | 日本欧美不卡一区二区三区在线 | 亚洲成在人线av | 武则天一级淫片免费看 | 亚州三级| 污污的视频在线播放 | 青草国产视频 | 青春草免费视频 | 在线播放日本爽快片 | 日韩毛片在线影视 | 四虎免费影院4hu永久免费 | 四虎sihu新版影院亚洲精品 | 亚洲综合色区中文字幕 | 亚洲第一伊人 | 日韩免费精品一级毛片 | 色好看在线视频播放 | 天天看天天干 | 午夜视频在线免费观看 | 色干网| 日韩在线专区 | 欧美无删减 | 婷婷色伊人 | 亚洲精品高清在线 | 性生活视频欧美 | 野外三级国产在线观看 | 最新国产中文字幕 | 色国产视频 | 亚洲人与牲动交xxxxbbbb | 午夜三级黄色片 | 午夜免费福利影院 |