Deploy Inicial do SteelCheck com Docker Build Automatizado
This commit is contained in:
59
services/pdfService.ts
Normal file
59
services/pdfService.ts
Normal file
@@ -0,0 +1,59 @@
|
||||
import jsPDF from 'jspdf';
|
||||
import html2canvas from 'html2canvas';
|
||||
|
||||
export const exportAsPdf = async (elementId: string, fileName: string, action: 'preview' | 'download'): Promise<void> => {
|
||||
const input = document.getElementById(elementId);
|
||||
if (!input) {
|
||||
console.error(`Element with id ${elementId} not found.`);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const canvas = await html2canvas(input, {
|
||||
scale: 2, // Higher scale improves quality
|
||||
useCORS: true,
|
||||
logging: false,
|
||||
});
|
||||
|
||||
const imgData = canvas.toDataURL('image/png');
|
||||
|
||||
// A4 dimensions in mm: 210 x 297
|
||||
const pdf = new jsPDF({
|
||||
orientation: 'portrait',
|
||||
unit: 'mm',
|
||||
format: 'a4',
|
||||
});
|
||||
|
||||
const pdfWidth = pdf.internal.pageSize.getWidth();
|
||||
const pdfHeight = pdf.internal.pageSize.getHeight();
|
||||
const canvasWidth = canvas.width;
|
||||
const canvasHeight = canvas.height;
|
||||
|
||||
// Calculate the aspect ratio
|
||||
const ratio = canvasWidth / canvasHeight;
|
||||
let imgWidth = pdfWidth;
|
||||
let imgHeight = imgWidth / ratio;
|
||||
|
||||
// If the calculated height is greater than the page height, scale down
|
||||
if (imgHeight > pdfHeight) {
|
||||
imgHeight = pdfHeight;
|
||||
imgWidth = imgHeight * ratio;
|
||||
}
|
||||
|
||||
const x = (pdfWidth - imgWidth) / 2;
|
||||
const y = 0;
|
||||
|
||||
pdf.addImage(imgData, 'PNG', x, y, imgWidth, imgHeight);
|
||||
|
||||
if (action === 'download') {
|
||||
pdf.save(`${fileName}.pdf`);
|
||||
} else {
|
||||
const pdfBlob = pdf.output('blob');
|
||||
const pdfUrl = URL.createObjectURL(pdfBlob);
|
||||
window.open(pdfUrl, '_blank');
|
||||
URL.revokeObjectURL(pdfUrl);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Error generating PDF:", error);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user