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();
}
我想为我的项目中的一个元素制作一个 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();
}