当前位置: 首页 > 知识库问答 >
问题:

如何使用jspdf和html2canvas打印全屏

糜野
2023-03-14

演示

嗨,我在应用程序中使用Angular8。在这里,我使用jspdf和html2canvas将html转换为pdf。但我只能打印半页,不能打印整页。谁能帮我找出哪里出了问题。

我附上了一个演示,当我在下拉列表中选择任何值时,会打开一个div,所以我需要获得div部分中所有的完整值。请帮忙。我得到的输出是这样的,但它不包含预期的完整值:

输出

如果有任何其他的方法,输出作为我的要求也被接受。

TS:

 public downloadPdf() {
    var data = document.getElementById('pdfDownload');
    html2canvas(data).then(canvas => {
      // Few necessary setting options
      var imgWidth = 208;
      var imgHeight = canvas.height * imgWidth / canvas.width;
      alert(imgHeight)
      const contentDataURL = canvas.toDataURL('image/png')
      let pdf = new jspdf('p', 'mm', 'a4'); // A4 size page of PDF
      var position = 0;
      pdf.addImage(contentDataURL, 'PNG', 0, position, imgWidth, imgHeight);
      //  pdf.save('new-file.pdf');
      window.open(pdf.output('bloburl', { filename: 'new-file.pdf' }), '_blank');
    });
 
  }

共有2个答案

田博易
2023-03-14

而不是创建pdf从图像,直接创建pdf从html使用addHtml方法的jspdf.我已经创建了下面的代码使用它。

您必须在索引页的标题部分添加此脚本

<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.js"></script>

public downloadPdf() {
$("pdfOpenHide").attr("hidden", true);
var removeClass = document.getElementsByClassName("vert-scrollable-150");
removeClass[0].classList.add("RemoveThisClass");
removeClass[0].classList.remove("vert-scrollable-150");

var data = document.getElementById("pdfDownload");
const pdf = new jspdf("p", "pt", "a4");
pdf.addHTML(data, () => {
  window.open(
    pdf.output("bloburl", { filename: "new-file.pdf" }),
    "_blank"
  );
});
var addClass = document.getElementsByClassName("RemoveThisClass");
addClass[0].classList.add("vert-scrollable-150");
addClass[0].classList.remove("RemoveThisClass"); 

}

这对你有用。您还可以从htmltopdf转换器获取参考

宋康安
2023-03-14

为此,您必须在html2canvas方法scrollY{scrollY:-window.scrollY}中添加选项,它将获取完全呈现页面的屏幕截图。

HTML2画布(数据,{scrollY:-window.scrollY,比例尺: 1}

除此之外,我们知道滚动条中存在数据。为此,您必须暂时删除滚动,并需要在pdf生成后添加。您可以通过简单地将id添加到此来完成此操作。

//为禁用滚动而编码

文件getElementById('alldata')。风格溢出='inherit';文件getElementById('alldata')。风格maxHeight='inherit';

      async downloadPdf() {
    var data = document.getElementById('pdfDownload');
    $('pdfOpenHide').attr('hidden', true);
    // disable the scroll
     document.getElementById('alldata').style.overflow = 'inherit';
     document.getElementById('alldata').style.maxHeight = 'inherit';

   await  html2canvas(data, {scrollY: -window.scrollY, 
   scale: 1}).then(canvas => {
      // Few necessary setting options
      var imgWidth = 150;
      var imgHeight = canvas.height * imgWidth / canvas.width;
      const contentDataURL = canvas.toDataURL('image/png', 1.0)
// enabling the scroll 
      document.getElementById('alldata').style.overflow = 'scroll';
        document.getElementById('alldata').style.maxHeight = '150px';

      let pdf = new jspdf('l', 'mm','a4'); // A4 size page of PDF
      var position = 0;
   // add tghis width height according to your requirement
      const divHeight = data.clientHeight
  const divWidth = data.clientWidth
  const ratio = divHeight / divWidth;

       const width = pdf.internal.pageSize.getWidth();
    let height = pdf.internal.pageSize.getHeight();
        height = ratio * width;
      pdf.addImage(contentDataURL, 'PNG', 0, position, width, height);
      window.open(pdf.output('bloburl', { filename: 'new-file.pdf' }), '_blank');
    }); 
}

如果滚动条中的数据更多,您也可以使用jspdf添加页面。

如需更多参考,您可以检查此HTML2Canvas不呈现完整div,只呈现屏幕上可见的内容?

另一种解决方案:如果数据更多

   async downloadPdf() {
        var data = document.getElementById("pdfDownload");
        $("pdfOpenHide").attr("hidden", true);
        // To disable the scroll
        document.getElementById("alldata").style.overflow = "inherit";
        document.getElementById("alldata").style.maxHeight = "inherit";
    
        await html2canvas(data, { scrollY: -window.scrollY, scale: 1 }).then(
          canvas => {
            const contentDataURL = canvas.toDataURL("image/png", 1.0);
            // enabling the scroll
            document.getElementById("alldata").style.overflow = "scroll";
            document.getElementById("alldata").style.maxHeight = "150px";
    
            let pdf = new jspdf("l", "mm", "a4"); // A4 size page of PDF
    
            let imgWidth = 300;
            let pageHeight = pdf.internal.pageSize.height;
            let imgHeight = (canvas.height * imgWidth) / canvas.width;
            let heightLeft = imgHeight;
            let position = 0;
    
            pdf.addImage(contentDataURL, "PNG", 0, position, imgWidth, imgHeight);
            heightLeft -= pageHeight;
    
            while (heightLeft >= 0) {
              position = heightLeft - imgHeight;
              pdf.addPage();
              pdf.addImage(contentDataURL, "PNG", 0, position, imgWidth, imgHeight);
              heightLeft -= pageHeight;
            }
            window.open(
              pdf.output("bloburl", { filename: "new-file.pdf" }),
              "_blank"
            );
          }
        );
      }

 类似资料:
  • 问题内容: 我目前正在使用学校管理软件,该软件通常需要导出包含和的html内容。 我已经尝试了所有可能的方法来编写代码,从而能够以一种很好的方式(最好是使用CSS)导出html数据。在这里检查了一些问题和答案之后,我尝试使用spdf,但是没有运气。 它一直在破坏我的表对齐方式,然后我读了一下,但是要实现它是我的问题,如果要使用div标签,则要捕获内容,然后发送画布以将画布导出为pdf。 这是我的代

  • 问题内容: 我想将一些div转换为PDF,并且尝试了jsPDF库,但没有成功。看来我不明白我需要导入什么才能使库正常工作。我已经看过这些示例,但仍然无法弄清楚。我尝试了以下方法: 在jQuery之后: 用于测试目的,但我收到: 身体的第一个div 在哪里。 问题答案: 您可以按如下方式使用html中的pdf, 步骤1:将以下脚本添加到标题 步骤2:添加HTML脚本以执行jsPDF代码 对此进行自定

  • testdate.java:

  • 问题内容: 我想使用PDFBox打印 由iText创建的 PDF文件 。我已经使用PDDocument类及其方法print()成功尝试了此操作。您可以在此处找到文档: http //pdfbox.apache.org/apidocs/。 (我正在使用此代码:) 方法print()很好用,但是 有一个问题:当我需要打印多个文件时,该方法要求我为每个文档选择打印机。 有什么办法只能设置一次打印机吗?

  • 问题内容: 我想从android应用程序中打印文件。同样,在google上搜索后,我发现一些有用的信息,我将不得不在HTTP中使用IPP(Internet打印协议)。而且我是ipp的新手,但是我使用过HTTP。那么有人可以帮我吗?谁能给我一些有用的信息或链接?提前致谢 ? 问题答案: 您需要发出具有一些特殊功能的HTTP PUT请求,您必须: 使用端口631代替80(当然,除非明确指定了端口)。

  • 我需要在cmd上打印这个字符。其UNICODE编码为U+26C0。我尝试了这个:system.out.print(“”);但在跑步中我得到了“?”角色谢谢。