I trying to convert html to PDF using jspdf and html2canvas libs. But on the eighth page i got this error:
But, less than 4 pages it almost works.. From the fourth page background color and page logo disappears too:
Obs: i'm using useRef to get the html element to convert in PDF. This one (className 'allPages') have the real pages ('print') that a want to convert. Maybe this is the cause of the error, but this is the only way the i find to convert pages in pdf.
function generatePDF(){ html2canvas(printRefs.current, { logging: true, allowTaint:true, letterRendering: 1, useCORS: true, scale: 4, dpi: 24 } ).then(canvas => {
const pdf = new jsPDF('p', 'mm', 'a4');
var imgData = canvas.toDataURL("image/jpeg", 1.0);
var imgWidth = 210;
var pageHeight= pdf.internal.pageSize.height;
var imgHeight = canvas.height * imgWidth / canvas.width;
var heightLeft = imgHeight;
var position = 0;
pdf.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight);
heightLeft -= pageHeight;
let length = text.length;
for(let i = 0; i < length-1; i++) {
position += heightLeft - imgHeight; // top padding for other pages
pdf.addPage();
pdf.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight);
}
pdf.save( 'file.pdf');
}); }
function App(){ return ( <input type="text" onChange={(e) => charConversor(e.target.value)}/>
{text.length}
Generate PDF {text.map((characters, index) => ( <div key={index}
className="print"
ref={el => printRefs.current[index] = el}
>
<header>
<img className={"logo"} rel="icon" type="image/svg+xml" src={image} />
</header>
{index}
<div className='text'>
{
characters.map((char, index) => {
return <p className="char" key={index}> {char}</p>
})
}
</div>
</div>
))}
</div>
</div>
); }