Untitled

 avatar
unknown
plain_text
2 years ago
2.4 kB
7
Indexable
async function convertHtmlToPdf(htmlElements, options = {}) {
      // Create a new PDF document
      const pdf = new jsPDF(options.orientation || 'portrait', options.unit || 'mm', options.format || 'a4');
      const pageHeight = pdf.internal.pageSize.height - 10;
      let currentPage = 1;
      let lastYPos = 10;

      for (const element of htmlElements) {
        // Use HTML2Canvas to create an image of the element
        const canvas = await html2canvas(element);

        // Calculate the height of the element and how many pages it will span
        const elementHeight = canvas.height * 72 / 96; // Convert px to pt
        let numPages = Math.ceil(elementHeight / pageHeight);

        // Adjust the page height based on the remaining height of the element
        let remainingHeight = elementHeight;
        while (numPages > 1 && (currentPage + numPages - 1) * pageHeight > lastYPos + remainingHeight) {
          numPages--;
        }
        const pageHeightAdjusted = remainingHeight / numPages;

        // Add the element to the PDF document, splitting it into multiple pages if necessary
        let yPos = lastYPos;
        for (let i = 0; i < numPages; i++) {
          if (lastYPos + pageHeightAdjusted > currentPage * pageHeight) {
            pdf.addPage();
            currentPage++;
            yPos = 10;
          }
          const height = Math.min(pageHeightAdjusted, (currentPage * pageHeight) - lastYPos - 10);
          const imgData = canvas.toDataURL('image/png');
          pdf.addImage(imgData, 'PNG', 10, yPos, pdf.internal.pageSize.width - 20, height);
          remainingHeight -= height;
          yPos += height + 10;
          lastYPos = yPos;
        }
      }

      // Save the PDF document
      pdf.save(options.filename || 'converted.pdf');
    }

    const htmlElements = [
     document.querySelector('.page1'),
     document.querySelector('.page2'),
     document.querySelector('.page3'),
     document.querySelector('.page4'),
     document.querySelector('.page5'),
     document.querySelector('.page6'),
     document.querySelector('.page7'),
     document.querySelector('.page8')];

     function getPdf3(){
      convertHtmlToPdf(htmlElements, { orientation: 'portrait', unit: 'mm', format: 'a4', filename: 'converted.pdf' });
     }
Editor is loading...