最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

  發(fā)布時(shí)間:2018-11-23 15:23:31   作者:前端愛(ài)好者   我要評(píng)論
這篇文章主要介紹了詳解使用canvas保存網(wǎng)頁(yè)為pdf文件支持跨域的相關(guān)資料,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

前言

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

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

正文

需求:用戶(hù)點(diǎn)擊下載,將頁(yè)面保存為PDF文件并下載。

思路:繼續(xù)使用Canvas截圖后將畫(huà)布內(nèi)容轉(zhuǎn)換為pdf文件。

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

引入canvas的js文件,js文件獲取地址官網(wǎng)主頁(yè):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">導(dǎo)出為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畫(huà)布放大2倍,然后盛放在小的容器內(nèi),處理模糊
 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);
 //修改背景顏色,默認(rèn)是黑色
 $('.sta-main').css("background", "#fff")
 html2canvas( _canvas, {
 //處理pdf跨域獲取不到跨域信息問(wèn)題
 taintTest : false,
 useCORS : true,
 allowTaint : false, 
 canvas : canvas2,
 dpi: 172,//導(dǎo)出pdf清晰度
 onrendered: function (canvas) {
 var contentWidth = canvas.width;
 var contentHeight = canvas.height;
 //一頁(yè)pdf顯示html頁(yè)面生成的canvas高度;
 var pageHeight = contentWidth / 592.28 * 841.89;
 //未生成pdf的html頁(yè)面高度
 var leftHeight = contentHeight;
 //pdf頁(yè)面偏移
 var position = 0;
 //html頁(yè)面生成的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');
 //有兩個(gè)高度需要區(qū)分,一個(gè)是html頁(yè)面的實(shí)際高度,和生成pdf的頁(yè)面高度(841.89)
 //當(dāng)內(nèi)容未超過(guò)pdf一頁(yè)顯示的范圍,無(wú)需分頁(yè)
 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;
 //避免添加空白頁(yè)
 if (leftHeight > 0) {
 pdf.addPage();
 }
 }
 }
 pdf.save('PDF的名字.pdf');
 }
 })
 $('.sta-main').css("background", "")
})
</script> 

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

同樣也有偏移、模糊、跨域等問(wèn)題,使用之前的代碼來(lái)處理。

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

完美轉(zhuǎn)換為pdf。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • HTML5實(shí)現(xiàn)的移動(dòng)端購(gòu)物車(chē)自動(dòng)結(jié)算功能示例代碼

    本文介紹HTML5實(shí)現(xiàn)移動(dòng)端購(gòu)物車(chē)自動(dòng)結(jié)算,通過(guò)WebStorage、事件監(jiān)聽(tīng)、DOM操作等技術(shù),確保實(shí)時(shí)更新與數(shù)據(jù)同步,優(yōu)化性能及無(wú)障礙性,提升用戶(hù)體驗(yàn),感興趣的朋友一起看看吧
    2025-06-18
  • HTML5 中的<button>標(biāo)簽用法和特征

    在HTML5中,<button>標(biāo)簽用于定義一個(gè)可點(diǎn)擊的按鈕,它是創(chuàng)建交互式網(wǎng)頁(yè)的重要元素之一,本文將深入解析HTML5中的<button>標(biāo)簽,詳細(xì)介紹其屬性、樣式以及實(shí)際
    2025-06-18
  • 基于 HTML5 Canvas 實(shí)現(xiàn)圖片旋轉(zhuǎn)與下載功能(完整代碼展示)

    本文將深入剖析一段基于 HTML5 Canvas 的代碼,該代碼實(shí)現(xiàn)了圖片的旋轉(zhuǎn)(90 度和 180 度)以及旋轉(zhuǎn)后圖片的下載功能,通過(guò)對(duì)代碼的解讀,我們可以學(xué)習(xí)到如何利用 Canvas API
    2025-06-18
  • HTML5 getUserMedia API網(wǎng)頁(yè)錄音實(shí)現(xiàn)指南示例小結(jié)

    本教程將指導(dǎo)你如何利用這一API,結(jié)合Web Audio API,實(shí)現(xiàn)網(wǎng)頁(yè)錄音功能,從獲取音頻流到處理和保存錄音,整個(gè)過(guò)程將逐步詳解,此外,還討論了getUserMedia API的使用限制和最
    2025-06-16
  • HTML5 搜索框Search Box詳解

    HTML5的搜索框是一個(gè)強(qiáng)大的工具,能夠有效提升用戶(hù)體驗(yàn),通過(guò)結(jié)合自動(dòng)補(bǔ)全功能和適當(dāng)?shù)臉邮?,可以?chuàng)建出既美觀又實(shí)用的搜索界面,這篇文章給大家介紹HTML5 搜索框Search Box
    2025-06-13
  • 全面解析HTML5中Checkbox標(biāo)簽

    Checkbox是HTML5中非常重要的表單元素之一,通過(guò)合理使用其屬性和樣式自定義方法,可以為用戶(hù)提供豐富多樣的交互體驗(yàn),這篇文章給大家介紹HTML5中Checkbox標(biāo)簽的深入全面解
    2025-06-13
  • HTML5無(wú)插件拖拽圖片上傳功能實(shí)現(xiàn)過(guò)程

    本實(shí)例展示了一種基于HTML5技術(shù)的圖片上傳功能,無(wú)需外部插件即可通過(guò)拖放圖片實(shí)現(xiàn)上傳,涉及到HTML5的拖放API和File API,以及使用CSS來(lái)增強(qiáng)用戶(hù)界面的交互性和視覺(jué)反饋,
    2025-05-16
  • HTML5 定位大全之相對(duì)定位、絕對(duì)定位和固定定位

    在HTML5和CSS中,定位(positioning)是控制元素在頁(yè)面上位置的重要機(jī)制,主要有四種定位方式:靜態(tài)定位(static)、相對(duì)定位(relative)、絕對(duì)定位(absolute)和固定定位(fixed),
    2025-05-13
  • HTML5中的Microdata與歷史記錄管理詳解

    Microdata作為HTML5新增的一個(gè)特性,它允許開(kāi)發(fā)者在HTML文檔中添加更多的語(yǔ)義信息,以便于搜索引擎和瀏覽器更好地理解頁(yè)面內(nèi)容,本文將探討HTML5中Microdata的使用方法以及
    2025-04-21
  • HTML5表格語(yǔ)法格式詳解

    在HTML語(yǔ)法中,表格主要通過(guò)< table >、< tr >和< td >3個(gè)標(biāo)簽構(gòu)成,本文通過(guò)實(shí)例代碼講解HTML5表格語(yǔ)法格式,感興趣的朋友一起看看吧
    2025-04-21

最新評(píng)論

呼伦贝尔市| 吉安市| 宁蒗| 瓦房店市| 珲春市| 昭觉县| 临汾市| 新丰县| 玛纳斯县| 积石山| 子长县| 泊头市| 桐乡市| 武穴市| 樟树市| 砀山县| 南丰县| 南江县| 江口县| 合阳县| 屯门区| 蒙自县| 祁阳县| 金坛市| 安新县| 改则县| 江阴市| 肃北| 建瓯市| 额尔古纳市| 昭通市| 化州市| 杭锦后旗| 囊谦县| 洪江市| 库车县| 左权县| 马山县| 左贡县| 卢湾区| 罗定市|