eKoopmans / html2pdf.js

Client-side HTML-to-PDF rendering using pure JS.
MIT License
4.07k stars 1.38k forks source link

How to set background image on each page #628

Open zakk616 opened 1 year ago

zakk616 commented 1 year ago

I'm tried to generate a report from HTML to PDF, but i want to render a background image on each page... currently I'm using this code:

const options = {
        margin: [0.5, 0, 0, 0],
        filename: 'filename.pdf',
        image: {
            type: 'jpeg',
            quality: 0.98
        },
        html2canvas: {
            scale: 2
        },
        pagebreak: { avoid: '#row' },
        jsPDF: {
            unit: 'in',
            format: 'a4',
            orientation: 'p'
        }
    }

var element = document.getElementById('pf1').innerHTML;

var footerLogo = 'data:image/png;base64,iVBORw0K.........GgoAAAA';
var backgroundImg = 'data:image/png;base64,iVBORw0K..........GgoAAAANSU';

html2pdf().from(element).set(options).toPdf().get('pdf').then((pdf) => {
      var totalPages = pdf.internal.getNumberOfPages();
      for (let i = 1; i <= totalPages; i++) {
          // set footer to every page
          pdf.setPage(i);
          // set footer font
          pdf.setFontSize(10);
          pdf.setTextColor(150);
          pdf.text(pdf.internal.pageSize.getWidth() - pdf.internal.pageSize.getWidth() + 0.3,
              pdf.internal.pageSize.getHeight() - 0.3, 'Page ' + i + ' of ' + totalPages);

          pdf.addImage(backgroundImg, 'png', 1.5, 3.5, pdf.internal.pageSize.getWidth() - 3, pdf.internal.pageSize.getWidth() - 3)
          pdf.addImage(footerLogo, 'png', 0, 0, pdf.internal.pageSize.getWidth(), 0.3)
      }
      window.open(pdf.output('bloburl'), '_blank');
});

Output:

image

the background image renders on the pdf content instead of being rendered behind.

zakk616 commented 1 year ago

still looking for this help...

Monarul007 commented 2 months ago

@zakk616 Did you got any solution for this?

zakk616 commented 2 months ago

@Monarul007 I manged to do it using the background code, sample is here:

codepen link