Html2canvas / jspdf 裁剪图片

Html2canvas / jspdf cut off image

我想为我的项目中的一个元素制作一个 pdf,但图像总是在右侧被截断。 我使用 jspdf 和 html2canvas

这就是我想要的

这就是我在 pdf 中得到的内容:

如您所见,图片宽度不合适。

我试过以下方法:

Html2Canvas image is getting cut https://tutel.me/c/programming/questions/44796908/jspdf+html2canvas++html++images+cut+off+capture https://www.reddit.com/r/learnjavascript/comments/cnn7q4/anyone_experience_with_jspdf_my_image_is_cut_off/ html2canvas offscreen

但是 none 这些工作。

这是我的代码:

const offerteId = $(e).data("id"),
              card = document.querySelector('.body-pdf-' + offerteId + ''),
              filename  = offerteId + '.pdf';

        html2canvas(card).then(function(canvas) {
            const img = canvas.toDataURL("image/png"),

            pdf = new jsPDF({
                orientation: 'p',
                unit: 'mm',
                format: 'a4',
            });

            // Optional - set properties on the document
            pdf.setProperties({
                title: offerteId.toString(),
                subject: 'Offerte: ' + offerteId.toString(),
            });

            const imgProps = pdf.getImageProperties(img);
            const pdfWidth = pdf.internal.pageSize.getWidth();
            const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;

            pdf.addImage(img, 'JPEG', 0, 0, pdfWidth, pdfHeight);
            pdf.save(filename);
        });

希望有人能帮忙

每次 html2canvas 更改元素的宽度和高度,在您的情况下,更改 'card' 元素。

您应该使用 scale: 1,并且 html2Canvas 将使用您首先设置的宽度和高度。

const options = { scale: 1 }
html2canvas(card, options).then(function(canvas) { /*your code*/ }

我今天遇到了类似的问题。我之所以绕过它是因为你在官方github上提出的一个问题:https://github.com/eKoopmans/html2pdf.js/issues/39.

通过在将页面呈现为 PDF 之前将 html 和 body 标签的宽度设置为 794px,页面可以很好地适应宽度。它对我有用,所以这对我来说已经足够了,尽管它可能不是正确的答案。

当 html2canvas 渲染图像时,它会将捕获限制在屏幕的可见区域。然后,唯一对我有用的是将以下代码添加到我的 css.

.html2canvas-container { 
    width: 3000px; 
    height: 3000px; 
}

此样式代码用于防止html2canvas将渲染限制在可视区域。

我有同样的问题,我通过设置 window 宽度到我的主页容器然后设置到 html2canvas 宽度来解决它,具有相同的值。

function exportPDF(div, fileName) {
    const invoice = this.document.getElementById(div == null ? "generalDiv" : div);
    invoice.style.width =  $(window).width()+"px";
    var opt = {
        margin: 1,
        filename: fileName+'.pdf',
        image: { type: 'jpeg', quality: 0.98 },
        html2canvas: { scale: 1, width: $(window).width()},
        jsPDF: { unit: 'in', format: 'a0', orientation: 'portrait' }
    };
    html2pdf().from(invoice).set(opt).save();
}