国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JavaScript > 正文

js實現html轉成pdf

2020-03-24 17:10:49
字體:
來源:轉載
供稿:網友
在項目開發的時候,我們偶爾或者是經常會遇到一些難題,關于用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 codegetCharCodeByGlyphiconsName: 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的詳細內容,html教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武陟县| 丰宁| 衡阳县| 叙永县| 建宁县| 宝清县| 龙口市| 拜城县| 垦利县| 那曲县| 社旗县| 达孜县| 阿拉善右旗| 昌乐县| 济宁市| 寿宁县| 西林县| 湖南省| 杭锦旗| 北辰区| 中卫市| 津市市| 调兵山市| 乌拉特中旗| 海阳市| 宜丰县| 阿合奇县| 英德市| 苗栗市| 南城县| 合川市| 金坛市| 西平县| 宁晋县| 伊川县| 黔西| 年辖:市辖区| 贵德县| 鱼台县| 黔江区| 增城市|