详解使用canvas保存网页为PDF文件支持跨域的完整攻略。
1. 简介
现在越来越多的网站需要支持生成PDF文件。而通过canvas来保存HTML页面为PDF文件是非常流行的一种解决方案,同时它也支持跨域。
2. 实现过程
2.1 引入jsPDF库
我们会使用到一个叫做jsPDF的库来实现将HTML页面转为PDF文件的操作。所以我们首先需要在HTML页面中引入该库:
<script src="https://cdn.bootcdn.net/ajax/libs/jspdf/1.5.3/jspdf.debug.js"></script>
2.2 获取页面内容
我们需要使用DOM来获取HTML页面的内容,然后将内容绘制在canvas中。
示例:
var HTML_Width = $("#canvas_div").width();
var HTML_Height = $("#canvas_div").height();
var top_left_margin = 15;
var PDF_Width = HTML_Width + (top_left_margin * 2);
var PDF_Height = (PDF_Width * 1.5) + (top_left_margin * 2);
var canvas_image_width = HTML_Width;
var canvas_image_height = HTML_Height;
var totalPDFPages = Math.ceil(HTML_Height / PDF_Height) - 1;
var canvas_image = new Image();
var pdf = new jsPDF('p', 'pt', [PDF_Width, PDF_Height]);
canvas_image.onload = function() {
var pdf_file = pdf.output('datauristring');
}
var printWindow = window.open("", "", "width=1280,height=1080");
printWindow.document.write('<html><head><title>Title</title>');
printWindow.document.write('</head><body>');
printWindow.document.write(document.getElementById("canvas_div").innerHTML);
printWindow.document.write('</body></html>');
printWindow.document.close();
printWindow.print();
canvas_image.src = printWindow.document.getElementsByTagName('canvas')[0].toDataURL("image/jpeg");
2.3 将页面内容绘制在canvas中
我们需要在canvas中绘制HTML页面的内容。
示例:
html2canvas(document.body, {
onrendered: function(canvas) {
var imgData = canvas.toDataURL(
'image/jpeg');
var pdf = new jsPDF('p', 'mm', 'a4');
pdf.addImage(imgData, 'JPEG', 0, 0);
var pdf_file = pdf.output('datauristring');
}
});
2.4 将绘制好的canvas保存为PDF文件
我们需要将canvas中的内容转成一张图片,然后将该图片添加到PDF文件中。
示例:
var imgData = canvas.toDataURL("image/jpeg", 1.0);
var pdf = new jsPDF();
pdf.addImage(imgData, 'JPEG', 0, 0);
pdf.save("download.pdf");
2.5 支持跨域
如果需要从一个跨域的网站上获取内容,我们需要在网站服务器中添加一些额外的响应头信息,以允许跨域访问。
示例:
response.addHeader("Access-Control-Allow-Origin", "*");
3. 总结
通过这些步骤,我们可以将HTML页面保存为PDF文件,并在跨域环境下使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解使用canvas保存网页为pdf文件支持跨域 - Python技术站