如何使用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 文档相同的大小(分辨率)。否则它看起来会变形(拉伸)。

如果您想转换pxmm使用此链接http://www.endmemo.com/sconvert/millimeterpixel.php

如果要保持比例:``` var ratio = canvas.width/canvas.height; var width = doc.internal.pageSize.getWidth(); var高度=宽度/比例;doc.addImage(imgData, 'PNG', 0, 0, width, height); ``
2021-04-24 18:25:17
您如何保证您的图像始终与页面/PDF 文档的大小/分辨率相同?更好的方法是计算图像的纵横比和页面的相对宽高比。请参阅下面的我的答案
2021-04-25 18:25:17
doc.internal.pageSize.getWidth(); 获取错误,因为 getWidth() 不是函数
2021-04-28 18:25:17
我在从html2canvas方法缩放图像高度时遇到问题,此解决方案修复了它。对于配合画布宽度到PDF我使用这种方法:html2canvas(pdfElement, { scrollY: -window.scrollY })此外,使用方法中的 x、y 值,addImage()您可以设置页面中的 pdf 内容位置。
2021-05-15 18:25:17
对于这个解决方案,即使它适合,但 pdf 页面最终会被扭曲。还是谢谢你
2021-05-20 18:25:17

如果您需要获得宽度为 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');
      });
如果我想为此添加另一个页面怎么办?
2021-05-07 18:25:17
嗯 - 我不记得在任何地方提到过 html2canvas。但是......让我们面对现实,这正是我们大多数人所做的,谢谢!
2021-05-20 18:25:17

我的回答涉及您所问问题的一个更具体的案例,但我认为可以从中得出一些想法以更广泛地应用。另外,如果可以的话,我会将其作为对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.
     }
});
这种方法解决了我将大图像装入字母格式页面的问题。完全推荐它
2021-05-07 18:25:17

我今天早上在尝试 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');
    });
最佳答案。将图像大小固定为比例大小。
2021-05-03 18:25:17
这很有效,但输出质量太低。
2021-05-08 18:25:17

自从这次提交以来 API 发生了变化,现在使用的是 1.4.1 版

var width = pdf.internal.pageSize.getWidth();
var height = pdf.internal.pageSize.getHeight();