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

首頁 > 開發(fā) > HTML5 > 正文

詳解使用canvas保存網(wǎng)頁為pdf文件支持跨域

2024-09-05 07:19:17
字體:
來源:轉載
供稿:網(wǎng)友

前言

之前上一篇隨筆說了Canvas截圖網(wǎng)頁為圖片,下來個新需求,把網(wǎng)頁截圖后保存為PDF文件供用戶下載。

使用canvas保存網(wǎng)頁為pdf文件支持跨域

正文

需求:用戶點擊下載,將頁面保存為PDF文件并下載。

思路:繼續(xù)使用Canvas截圖后將畫布內容轉換為pdf文件。

首先我們需要引入js文件jspdf.debug.js 下載路徑 https://github.com/MrRio/jsPDF

引入canvas的js文件,js文件獲取地址官網(wǎng)主頁:http://html2canvas.hertzen.com/

<script type="text/javascript" src="js/html2canvas.js"></script><script type="text/javascript" src="js/html2canvas.min.js"></script><script type="text/javascript" src="js/jspdf.debug.js"></script>

div按鈕代碼

 <div id="down_pdf">導出為PDF按鈕</div> <div class="sta-main">需要獲取為PDF的div</div>

jsp代碼

<script type="text/javascript">/* var downPdf = document.getElementById("down_pdf"); */var downPdf = document.getElementById("down_pdf");$("#down_pdf").on("click", function() { var canvas2 = document.createElement("canvas"); let _canvas = document.querySelector('.sta-main'); //獲取寬高 var w = parseInt(window.getComputedStyle(_canvas).width); var h = parseInt(window.getComputedStyle(_canvas) .height); //將canvas畫布放大2倍,然后盛放在小的容器內,處理模糊 canvas2.width = w * 2; canvas2.height = h * 2; canvas2.style.width = w + "px"; canvas2.style.height = h + "px"; var context = canvas2.getContext("2d"); //處理偏移 context.scale(1.5, 1.5); //修改背景顏色,默認是黑色 $('.sta-main').css("background", "#fff") html2canvas( _canvas, { //處理pdf跨域獲取不到跨域信息問題 taintTest : false, useCORS : true, allowTaint : false,  canvas : canvas2, dpi: 172,//導出pdf清晰度 onrendered: function (canvas) { var contentWidth = canvas.width; var contentHeight = canvas.height; //一頁pdf顯示html頁面生成的canvas高度; var pageHeight = contentWidth / 592.28 * 841.89; //未生成pdf的html頁面高度 var leftHeight = contentHeight; //pdf頁面偏移 var position = 0; //html頁面生成的canvas在pdf中圖片的寬高(a4紙的尺寸[595.28,841.89]) var imgWidth = 595.28; var imgHeight = 592.28 / contentWidth * contentHeight; var pageData = canvas.toDataURL('image/jpeg', 1.0); var pdf = new jsPDF('', 'pt', 'a4'); //有兩個高度需要區(qū)分,一個是html頁面的實際高度,和生成pdf的頁面高度(841.89) //當內容未超過pdf一頁顯示的范圍,無需分頁 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的名字.pdf'); } }) $('.sta-main').css("background", "")})</script> 

此次網(wǎng)頁改為PDF,與上次截圖網(wǎng)頁為PNG,使用同一種技術,都是先使用Canvas截圖畫布后轉格式。

同樣也有偏移、模糊、跨域等問題,使用之前的代碼來處理。

轉換pdf會讓背景色變?yōu)楹谏褂胏ss樣式改一下背景色就可以了。

完美轉換為pdf。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 南宁市| 江都市| 吴忠市| 盐城市| 肃宁县| 额济纳旗| 景宁| 阿城市| 南和县| 连城县| 阳春市| 汝城县| 交城县| 沙田区| 荔波县| 淮阳县| 台山市| 镇原县| 中江县| 大悟县| 云阳县| 四川省| 两当县| 南皮县| 长兴县| 平阴县| 姚安县| 乌兰县| 平罗县| 绵竹市| 西和县| 祁阳县| 天长市| 大洼县| 神池县| 乌兰县| 玛纳斯县| 大邑县| 日喀则市| 隆昌县| 监利县|