前言
之前上一篇隨筆說了Canvas截圖網頁為圖片,下來個新需求,把網頁截圖后保存為PDF文件供用戶下載。
使用canvas保存網頁為pdf文件支持跨域
正文
需求:用戶點擊下載,將頁面保存為PDF文件并下載。
思路:繼續(xù)使用Canvas截圖后將畫布內容轉換為pdf文件。
首先我們需要引入js文件jspdf.debug.js 下載路徑 https://github.com/MrRio/jsPDF
引入canvas的js文件,js文件獲取地址官網主頁: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>
此次網頁改為PDF,與上次截圖網頁為PNG,使用同一種技術,都是先使用Canvas截圖畫布后轉格式。
同樣也有偏移、模糊、跨域等問題,使用之前的代碼來處理。
轉換pdf會讓背景色變?yōu)楹谏褂胏ss樣式改一下背景色就可以了。
完美轉換為pdf。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。