JSPDF преобразует два DIVS в PDF из двух страниц

#javascript #jspdf #html2canvas

Вопрос:

У меня есть страница, на которой есть DIV и кнопка загрузки, кнопка загрузки преобразует div в pdf с помощью JSPDF и загружает его, теперь страница содержит 2 файла с одинаковым размером, но разным содержимым, и мне нужна кнопка загрузки, чтобы создать файл PDF на 2 страницы и загрузить его

в JS

 $('#print').click(function (e) { 
    e.preventDefault();
    let HTML_Width = $(".report").width();
    let HTML_Height = $(".report").height();
    let top_left_margin = 1;
    let PDF_Width = HTML_Width   (top_left_margin * 2);
    let PDF_Height = (PDF_Width * 1.5)   (top_left_margin * 2);
    let canvas_image_width = HTML_Width;
    let canvas_image_height = HTML_Height;
    let totalPDFPages = Math.ceil(HTML_Height / PDF_Height) - 1;
    html2canvas($(".report")[0]).then(function (canvas) {
        let imgData = canvas.toDataURL("image/jpeg", 1.0);
        let pdf = new jsPDF('p', 'pt', [PDF_Width, PDF_Height]);
        pdf.addImage(imgData, 'JPG', top_left_margin, top_left_margin, canvas_image_width, 
canvas_image_height, 'FAST');
        for (let i = 1; i <= totalPDFPages; i  ) {
            pdf.addPage(PDF_Width, PDF_Height);
            pdf.addImage(imgData, 'JPG', top_left_margin, -(PDF_Height * i)   (top_left_margin * 
4), canvas_image_width, canvas_image_height);
        }
        pdf.save("Report.pdf");
        $(".html-content").hide();
    });

});
 

первый селектор div «.отчет» и второй селектор div «#отчет-два »
может кто-нибудь дать мне руку, пожалуйста?

Ответ №1:

Вы можете попробовать с:

 page-break-before: always;
 

Пример:

 @media print {
  .new-page {
    page-break-before: always;
  }
  button {
    display:none;
  }
} 
 <div>
 <h1>1 Page</h1>
   <p>
    Lorem, ipsum dolor sit amet consectetur adipisicing elit. Porro unde
    voluptas pariatur, sapiente voluptatem dignissimos ratione provident
    tenetur exercitationem itaque suscipit incidunt excepturi iusto
    consectetur odit reiciendis sunt quibusdam. Vitae?
   </p>
</div>
<div class="new-page">
 <h1>2 Page</h1>
 <p>
   Lorem, ipsum dolor sit amet consectetur adipisicing elit. Porro unde
   voluptas pariatur, sapiente voluptatem dignissimos ratione provident
   tenetur exercitationem itaque suscipit incidunt excepturi iusto
   consectetur odit reiciendis sunt quibusdam. Vitae?
 </p>
</div>
<button onClick="window.print()">Print pages</button> 

В противном случае, если выше не поможет, попробуйте установить фиксированную высоту и ширину.
С jsPDF вам нужно иметь new jsPDF("p", "pt", "a4"); ширину 600 пикселей и высоту 840 пикселей для портретной ориентации формата А4.