jsPDF & html2canvas 不将图像写入 pdf

jsPDF & html2canvas not writing image to pdf

使用 jspdf 和 html2canvas 拍摄用户在 table 配置器上选择的配置的快照(选择 top/side/laminate 颜色)。它通过使用透明png更改每个图像的来源来实现。

我在将图像插入 pdf 时遇到问题。我可以毫无问题地将它附加到文档中,并将文本和其他图像毫无问题地写入 pdf。我担心我的形象太大了。生成的 base64 输出是巨大的。

我已将其写入控制台:

var doc = new jsPDF('p', 'pt','a4',true);
doc.setFontSize(16);
doc.setTextColor(80, 77, 78);
doc.text(15, 2, 'should be an image under here'); 
html2canvas($("#prod"), {
    useCORS : true,
    onrendered: function(canvas) {
       var imgData = canvas.toDataURL('image/jpeg');

       doc.addImage(imgData, 'JPEG', 15, 0, 34, 37);
        console.log(imgData);
        $('#prod').append(canvas);
    }
});
doc.save('Spec_Sheet.pdf');

https://jsfiddle.net/x3x0e6ws/51/

所有图片均来自本地服务器。我在每个元素上都有一个最小高度,我什至尝试在 div 中添加文本来强制一个高度。

我该如何补救?

谢谢,

首先,非常感谢jsfiddle。 其次,您非常接近...只需将 doc.save 移动到 html2canvas 回调中即可。

解释原因:

当您调用 html2canvas 时,这是一个 "asynchronous" 调用。这就是函数的第二个参数是 "callback" 的原因。在实际完成渲染或添加 canvas 元素之前,代码继续下一行(在您的例子中是 doc.save)!稍后,代码 html2canvas 代码 returns 到 canvas 渲染完成时的回调,并将图像添加到您的(已保存)pdf...!

var doc = new jsPDF('p', 'pt','a4',true);
doc.setFontSize(16);
doc.setTextColor(80, 77, 78);
doc.text(15, 2, 'should be an image under here'); 
html2canvas($("#prod"), {
    useCORS : true,
    onrendered: function(canvas) {
       var imgData = canvas.toDataURL('image/jpeg');

       doc.addImage(imgData, 'JPEG', 15, 0, 34, 37);
       console.log(imgData);
       $('#prod').append(canvas);
       doc.save('Spec_Sheet.pdf');
    }
});