0

I am using dom-to-image and jsPDF to generate a A5 PDF. Additional space appears on every page of the pdf, but the canvasImageWidth and pdfWidth are same, by right the content should fit the pdf width exactly. How to remove those spaces?

const margin = 0;
const htmlWidth = 419.52755906 - (margin * 2); // a5 size in pt
const ratio = document.getElementById('article-body').offsetWidth / htmlWidth;
const htmlHeight = document.getElementById('article-body').offsetHeight / ratio;

let pdfWidth = 419.52755906; // a5 size in pt
let pdfHeight = 595.27559055; // a5 size in pt

const totalPDFPages = Math.ceil(htmlHeight / pdfHeight) - 1;
const data = this.document.getElementById('article-body');

const canvasImageWidth = htmlWidth;
const canvasImageHeight = htmlHeight;

console.log("canvasImageWidth : " + canvasImageWidth );
console.log("pdfWidth: " + pdfWidth);

domtoimage.toJpeg(data, { quality: 0.95, bgcolor: "#ffffff" }).then (function (dataUrl) {
    let pdf = new jsPDF('p', 'pt', [pdfWidth, pdfHeight]);
    pdf.addImage(dataUrl, 'png', margin, margin, canvasImageWidth, canvasImageHeight);

    for (let i = 1; i <= totalPDFPages; i++) {
        pdf.addPage([pdfWidth, pdfHeight], 'p');
        pdf.addImage(dataUrl, 'png', margin, - (pdfHeight * i) + margin, canvasImageWidth, canvasImageHeight);
    }

    pdf.save("<?php echo $this->item->alias; ?>" + '.pdf');
})
.catch(function (error) {
    console.error('oops, something went wrong!', error);
});

PDF enter image description here

Log
canvasImageWidth:
419 .52755906
pdfWidth: 419.52755906

K J
  • 8,045
  • 3
  • 14
  • 36
Jiawen
  • 1
  • 1
  • @KJ Checked that the size for a5 is 420x596. But using 420, the content layout will be slightly off when there are more pages in the pdf. – Jiawen Feb 08 '23 at 07:54

0 Answers0