【问题标题】:How do I convert a HTML canvas into a REAL picture?如何将 HTML 画布转换为真实图片?
【发布时间】:2019-01-24 13:18:52
【问题描述】:

我正在尝试将客户端临时和本地的 HTML 内容转换为真实图片。我做了我的研究canvas2base64canvas2base64html2base64,但没有生成真实的图片,它始终是基于base64代码的“图像”。

它做我想做的事。它会生成我想要的质量的图片。但问题是,我想用 jsPDF 将此图像放入 PDF,当图像是 base64 代码时,它无法将其放入 PDF。

我正在使用以下所有脚本:jquery.js、jspdf.js、html2canvas.js 和 FileSaver.js

有没有办法从画布中临时生成像 *.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');
		}

【问题讨论】:

  • 简而言之,您想从 HTML 内容创建 PDF。对吧??
  • 是的。我尝试绕过 html 到图像到 pdf,因为我想保留我的 CSS 样式,但我没有找到其他方法。我正在编写一个 Loveletter 生成器。单击短语并完成字母后,您将有几种不同的样式可供选择。在您决定了您想要的样式后,您可以使用您选择的样式将您的 Loveletter 下载为 PDF。

标签: javascript jquery html css jspdf


【解决方案1】:

感谢您的确认。请尝试这种方法,它不会妨碍您的 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');
    }
  });

}

【讨论】:

  • 非常感谢您的快速输入!如果我现在单击带有 print() 函数的按钮,我会从控制台中得到它:imgur.com/a/SfLQFvt。我的根目录中没有生成 PDF。如果我理解正确的话,我的文件夹里应该有一个 PDF 文件,对吧?
  • 正确。如果您在单击按钮时调用此函数,请尝试这种方式 $(document).on('click', '#printButton', function(){ html2canvas(document.body,{ // 你的代码 }); });
  • 不错!这现在可以使用并导出包含我想要的内容的 PDF。剩下的唯一问题是,我如何专门导出 html 内容而不是带有链接和页码的页眉和页脚 pdf?为什么会导出下载按钮?我试图只导出
    中的所有内容,而不是整个页面。 docdro.id/ZSah38Z
【解决方案2】:

很高兴听到该解决方案适合您。请投票解决您的问题的答案。为了解决您的最新问题,如果您只想在 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();

});

【讨论】:

  • 是的,我投了赞成票! :) 感谢您的明确帮助!对此,我真的非常感激。问题在于 pdf 中的页眉和页脚,而不是 HTML。它是在我导出 PDF 时生成的。 imgur.com/a/8dX8de2 黄色突出显示的部分是文件路径、PDF 的名称、PDF 的页码和导出日期在我的代码中不存在。有没有办法可以禁止在生成的 pdf wit jspdf 或任何其他方式中导出元数据?
猜你喜欢
  • 2021-11-23
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
  • 2017-05-13
  • 2021-09-12
  • 2011-02-13
相关资源
最近更新 更多