PDF中的图像截止:如何使画布完全适合PDF页面?

Gus*_*ias 6 canvas html2canvas jspdf

使用jspdf库将画布放置在PDF中时会切断图像.

html2canvas(myContainer, {background: 'red'}).then (canvas) ->
  imgData = canvas.toDataURL('image/jpeg', 1.0)
  window.open(imgData) # this is just a test that opens the image in a new tab and it displays nicely, the entire image
  pdf = new jsPDF("l", "pt", "b1") # tried a variety of formats but no luck
  pdf.addImage(imgData, 'JPEG', 0, 0)
  pdf.save('file.pdf') # the generated pdf that contains the image gets trimmed
Run Code Online (Sandbox Code Playgroud)

有没有人有任何想法如何使画布适合?

小智 12

尝试设置图像的宽度和高度(在任何情况下,似乎都没有addImage的文档):

var pdf = new jsPDF("l", "mm", "a4");
var imgData = canvas.toDataURL('image/jpeg', 1.0);

// due to lack of documentation; try setting w/h based on unit
pdf.addImage(imgData, 'JPEG', 10, 10, 180, 150);  // 180x150 mm @ (10,10)mm
Run Code Online (Sandbox Code Playgroud)


Lat*_*nis 6

这是对我有用的解决方案,适用于我的用例:

var canvas = document.getElementById('canvas');
var imgData = canvas.toDataURL("image/png");
var pdf = new jsPDF('p', 'pt', [canvas.width, canvas.height]);
var pdfWidth = pdf.internal.pageSize.getWidth();
var pdfHeight = pdf.internal.pageSize.getHeight();
pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight);
pdf.save("mypdf.pdf");
Run Code Online (Sandbox Code Playgroud)


Kom*_*ito 5

我有一个解决方案:

function saveImageToPdf(idOfHtmlElement)
{
   var fbcanvas = document.getElementById(idOfHtmlElement);
   html2canvas($(fbcanvas),
        {

            onrendered: function (canvas) {

                var width = canvas.width;
                var height = canvas.height;
                var millimeters = {};
                millimeters.width = Math.floor(width * 0.264583);
                millimeters.height = Math.floor(height * 0.264583);

                var imgData = canvas.toDataURL(
                    'image/png');
                var doc = new jsPDF("p", "mm", "a4");
                doc.deletePage(1);
                doc.addPage(millimeters.width, millimeters.height);
                doc.addImage(imgData, 'PNG', 0, 0);
                doc.save('WebSiteScreen.pdf');
            }
        });
}
Run Code Online (Sandbox Code Playgroud)

你要做的事情是:

  1. 将像素转换为mm.
  2. 首先删除未正确调整页面大小
  3. 创建一个尺寸合适的新尺寸mm.
  4. 保存图片.

  • 很好的解决方案。您是如何获得转换号0.264583的?目前,我的理解是您需要pdf的dpi值来确定转换数。 (2认同)