有没有办法解决这个问题?我试图以毫米为单位设置宽度和高度。如何将其设置为全角?
如何使用jsPDF设置图像以适应页面的宽度?
IT技术
javascript
jspdf
2021-03-12 18:25:17
6个回答
您可以获得如下所示的 PDF 文档的宽度和高度,
var doc = new jsPDF("p", "mm", "a4");
var width = doc.internal.pageSize.getWidth();
var height = doc.internal.pageSize.getHeight();
然后您可以使用此宽度和高度为您的图像适应整个 PDF 文档。
var imgData = 'data:image/jpeg;base64,/9j/4AAQSkZJ......';
doc.addImage(imgData, 'JPEG', 0, 0, width, height);
确保您的图像具有与 PDF 文档相同的大小(分辨率)。否则它看起来会变形(拉伸)。
如果您想转换px
为mm
使用此链接http://www.endmemo.com/sconvert/millimeterpixel.php
如果您需要获得宽度为 100%的 PDF 文件和自动高度,您可以使用html2canvas库的getImageProperties
属性
html2canvas(input)
.then((canvas) => {
const imgData = canvas.toDataURL('image/png');
const pdf = new jsPDF({
orientation: 'landscape',
});
const imgProps= pdf.getImageProperties(imgData);
const pdfWidth = pdf.internal.pageSize.getWidth();
const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;
pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight);
pdf.save('download.pdf');
});
我的回答涉及您所问问题的一个更具体的案例,但我认为可以从中得出一些想法以更广泛地应用。另外,如果可以的话,我会将其作为对Purushoth的答案(我的答案所基于的答案)的评论发布。
好的,所以我的问题是如何在不丢失纵横比的情况下将网页放入 pdf 文档。我将 jsPDF 与 html2canvas 结合使用,并根据我div
的宽度和高度计算了比率。我对 pdf 文档应用了相同的比例,页面完美地贴合在页面上,没有任何失真。
var divHeight = $('#div_id').height();
var divWidth = $('#div_id').width();
var ratio = divHeight / divWidth;
html2canvas(document.getElementById("div_id"), {
height: divHeight,
width: divWidth,
onrendered: function(canvas) {
var image = canvas.toDataURL("image/jpeg");
var doc = new jsPDF(); // using defaults: orientation=portrait, unit=mm, size=A4
var width = doc.internal.pageSize.getWidth();
var height = doc.internal.pageSize.getHeight();
height = ratio * width;
doc.addImage(image, 'JPEG', 0, 0, width-20, height-10);
doc.save('myPage.pdf'); //Download the rendered PDF.
}
});
我今天早上在尝试 html2canvas 时发现了这一点。虽然这不包括打印多页的规定,但它确实将图像缩放到页面宽度,并根据调整后的宽度比例重新调整高度:
html2canvas(document.getElementById('testdiv')).then(function(canvas){
var wid: number
var hgt: number
var img = canvas.toDataURL("image/png", wid = canvas.width, hgt = canvas.height);
var hratio = hgt/wid
var doc = new jsPDF('p','pt','a4');
var width = doc.internal.pageSize.width;
var height = width * hratio
doc.addImage(img,'JPEG',20,20, width, height);
doc.save('Test.pdf');
});
自从这次提交以来 API 发生了变化,现在使用的是 1.4.1 版
var width = pdf.internal.pageSize.getWidth();
var height = pdf.internal.pageSize.getHeight();
其它你可能感兴趣的问题