如何将 HTML canvas 转换为真实图片?
How do I convert a HTML canvas into a REAL picture?
我正在尝试将客户端临时本地的 HTML 内容转换为真实图片。我做了研究 canvas2base64canvas2base64html2base64,但没有任何地方生成真实图片,它总是基于 base64 代码的 "image"。
它做我想做的。它以我想要的质量生成图片。但问题是,我想用 jsPDF 将此图像放入 PDF 中,当图像是 base64 代码时,它无法将其放入 PDF 中。
我正在使用以下所有脚本:jquery.js、jspdf.js、html2canvas.js 和 FileSaver.js
有没有办法从 canvas 中临时生成像 *.png 或 *.jpg 这样的真实图像,它不是基于 base64 代码,而是保存在用户的 localStorage 中?所以我可以参考它并在我的代码中使用它?
下面的代码应生成图像,然后将图像放入 DIN A4 大小的 PDF 中。
function print() {
//const filename = 'Loveletter_.pdf';
html2canvas(document.querySelector('.finishedLetter')).then(function(canvas) {
var pdf = new jsPDF('p', 'mm', 'a4');
$("#test_me").attr("src", canvas.toDataURL("image/png", 1.0));
var ImgForPDF = document.getElementById('test_me').getAttribute('src');
pdf.addImage(ImgForPDF, 'PNG', 0, 0, 211, 298);
});
pdf.save('Loveletter_.pdf');
}
感谢您的确认。请尝试此方法,它不会妨碍您的 css 属性,并为您提供可打印的 PDF 文件:
function print() {
// Generating PDF using HTML2Canvas
html2canvas(document.body,{
useCORS: true,
onrendered:function(canvas){
var img=canvas.toDataURL("image/png");
var imgData = canvas.toDataURL('image/png');
var imgWidth = 210;
var pageHeight = 295;
var imgHeight = canvas.height * imgWidth / canvas.width;
var heightLeft = imgHeight;
var doc = new jsPDF('p', 'mm');
var position = 0;
doc.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight);
heightLeft -= pageHeight;
while (heightLeft >= 0) {
position = heightLeft - imgHeight;
doc.addPage();
doc.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight);
heightLeft -= pageHeight;
}
doc.save('myDoc.pdf');
}
});
}
很高兴听到该解决方案适合您。请对解决您的问题的答案进行投票。要解决您的最新问题,如果您只想在 PDF 中捕获一些特定的 div,您可以使用此技术:
$(document).on('click', '#download_button', function(){
// Settings before generating PDF
$('header').hide();
$('footer').hide();
// Generating PDF using HTML2Canvas
html2canvas(document.body,{
//Your code
});
// Reset properties which was updated before PDF generation
$('header').show();
$('footer').show();
});
我正在尝试将客户端临时本地的 HTML 内容转换为真实图片。我做了研究 canvas2base64canvas2base64html2base64,但没有任何地方生成真实图片,它总是基于 base64 代码的 "image"。
它做我想做的。它以我想要的质量生成图片。但问题是,我想用 jsPDF 将此图像放入 PDF 中,当图像是 base64 代码时,它无法将其放入 PDF 中。
我正在使用以下所有脚本:jquery.js、jspdf.js、html2canvas.js 和 FileSaver.js
有没有办法从 canvas 中临时生成像 *.png 或 *.jpg 这样的真实图像,它不是基于 base64 代码,而是保存在用户的 localStorage 中?所以我可以参考它并在我的代码中使用它?
下面的代码应生成图像,然后将图像放入 DIN A4 大小的 PDF 中。
function print() {
//const filename = 'Loveletter_.pdf';
html2canvas(document.querySelector('.finishedLetter')).then(function(canvas) {
var pdf = new jsPDF('p', 'mm', 'a4');
$("#test_me").attr("src", canvas.toDataURL("image/png", 1.0));
var ImgForPDF = document.getElementById('test_me').getAttribute('src');
pdf.addImage(ImgForPDF, 'PNG', 0, 0, 211, 298);
});
pdf.save('Loveletter_.pdf');
}
感谢您的确认。请尝试此方法,它不会妨碍您的 css 属性,并为您提供可打印的 PDF 文件:
function print() {
// Generating PDF using HTML2Canvas
html2canvas(document.body,{
useCORS: true,
onrendered:function(canvas){
var img=canvas.toDataURL("image/png");
var imgData = canvas.toDataURL('image/png');
var imgWidth = 210;
var pageHeight = 295;
var imgHeight = canvas.height * imgWidth / canvas.width;
var heightLeft = imgHeight;
var doc = new jsPDF('p', 'mm');
var position = 0;
doc.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight);
heightLeft -= pageHeight;
while (heightLeft >= 0) {
position = heightLeft - imgHeight;
doc.addPage();
doc.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight);
heightLeft -= pageHeight;
}
doc.save('myDoc.pdf');
}
});
}
很高兴听到该解决方案适合您。请对解决您的问题的答案进行投票。要解决您的最新问题,如果您只想在 PDF 中捕获一些特定的 div,您可以使用此技术:
$(document).on('click', '#download_button', function(){
// Settings before generating PDF
$('header').hide();
$('footer').hide();
// Generating PDF using HTML2Canvas
html2canvas(document.body,{
//Your code
});
// Reset properties which was updated before PDF generation
$('header').show();
$('footer').show();
});