Issue With Page Break,images are cut off in between.
apoorv28 opened this issue · 1 comments
apoorv28 commented
Hi everyone,
i have added my code for downloading pdf
in this i have a dashboard object from which i have calculated height of each div which needs to be printed on pdf,
const imageWidth = element.scrollWidth;
const a4Width = 595; // A4 width in pixels
const a4Height = 842; // A4 height in pixels
const scale = a4Width / imageWidth;
console.log('scale: ', scale);
const filter = (node: HTMLElement) => {
const exclusionClasses = [
'filters flex-10',
'gridster-list',
"tester-info-filters-list filters-list flex-15",
"filters tester-info-filters flex-10"
];
return !exclusionClasses.some((classname) => node.classList?.contains(classname));
};
const imageDataUrl = await htmlToImage.toPng(element, { width: imageWidth, height: element.scrollHeight, filter });
const image = new Image();
image.src = imageDataUrl;
await image.decode();
const pdf = new jsPDF({
orientation: 'portrait',
unit: 'px',
format: [a4Width, a4Height]
});
let yOffset = 0;
let pageYOffset = 0;
for (let i = 0; i < calculatedHeight.length; i++) {
const chartHeight = calculatedHeight[i].chartHeight;
if (pageYOffset + chartHeight * scale > a4Height) {
pdf.addPage();
pageYOffset = 0;
}
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
canvas.width = imageWidth;
canvas.height = chartHeight;
console.log('chartHeight: ', chartHeight);
ctx.clearRect(0, 0, imageWidth, chartHeight);
ctx.fillStyle = 'white';
ctx.fillRect(0, 0, imageWidth, chartHeight);
ctx.drawImage(image, 0, yOffset, imageWidth, chartHeight, 0, 0, imageWidth, chartHeight);
const blob = await new Promise<Blob>(resolve => canvas.toBlob(resolve, 'image/png'));
saveAs(blob, `cool$[i]`);
const imageDataURL = canvas.toDataURL('image/png');
pdf.addImage(imageDataURL, 'PNG', 0, pageYOffset, a4Width, chartHeight * scale);
console.log('pdf: ', pdf);
yOffset += chartHeight;
pageYOffset += chartHeight * scale;
}
pdf.save(pdfName);
}
calculated height of each div
[
{
"chartHeight": 76,
"chartHeightInPoints": 57,
"chartHeightFromTop": 2,
},
{
"chartHeight": 251,
"chartHeightInPoints": 188.25,
"chartHeightFromTop": 88,
},
{
"chartHeight": 566,
"chartHeightInPoints": 424.5,
"chartHeightFromTop": 380,
},
{
"chartHeight": 565,
"chartHeightInPoints": 423.75,
"chartHeightFromTop": 992,
},
{
"chartHeight": 565,
"chartHeightInPoints": 423.75,
"chartHeightFromTop": 1557,
},
{
"chartHeight": 619,
"chartHeightInPoints": 464.25,
"chartHeightFromTop": 2122,
},
{
"chartHeight": 780,
"chartHeightInPoints": 585,
"chartHeightFromTop": 2741,
},
{
"chartHeight": 565,
"chartHeightInPoints": 423.75,
"chartHeightFromTop": 3570,
},
{
"chartHeight": 565,
"chartHeightInPoints": 423.75,
"chartHeightFromTop": 4135,
"chartName": "C4: Test Parameter Pass/Fail Results (Open,Short,nVTEP)",
"chartType": "BarChart"
},
{
"chartHeight": 619,
"chartHeightInPoints": 464.25,
"chartHeightFromTop": 4700,
},
{
"chartHeight": 780,
"chartHeightInPoints": 585,
"chartHeightFromTop": 5319,
}
]