feat: replace html2canvas with native high-quality browser printing
This commit is contained in:
@@ -120,18 +120,17 @@ const App: React.FC = () => {
|
|||||||
}, [handleReset]);
|
}, [handleReset]);
|
||||||
|
|
||||||
const handleExport = (action: 'preview' | 'download') => {
|
const handleExport = (action: 'preview' | 'download') => {
|
||||||
if (reportsData && reportsData.length > 0) {
|
// Both actions now use native high-quality browser printing/PDF saving
|
||||||
const fileName = `Relatorio_SteelCheck_${reportsData[0].identification.certificateNumber || 'analise'}`;
|
window.print();
|
||||||
exportAsPdf('printable-report-container', fileName, action);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="min-h-screen">
|
<div className="min-h-screen print:bg-white print:m-0 print:p-0">
|
||||||
{isLoading && <Loader />}
|
<div className="print:hidden">
|
||||||
<Header onReset={handleReset} onClearKey={handleClearKey} hasKey={hasKey} provider={provider} />
|
{isLoading && <Loader />}
|
||||||
|
<Header onReset={handleReset} onClearKey={handleClearKey} hasKey={hasKey} provider={provider} />
|
||||||
|
|
||||||
<main className="container mx-auto p-4 sm:p-6 md:p-8 max-w-7xl">
|
<main className="container mx-auto p-4 sm:p-6 md:p-8 max-w-7xl">
|
||||||
{!hasKey ? (
|
{!hasKey ? (
|
||||||
<ApiKeySetup onKeySave={handleKeySave} />
|
<ApiKeySetup onKeySave={handleKeySave} />
|
||||||
) : !reportsData ? (
|
) : !reportsData ? (
|
||||||
@@ -199,9 +198,10 @@ const App: React.FC = () => {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</main>
|
</main>
|
||||||
|
</div>
|
||||||
|
|
||||||
{reportsData && (
|
{reportsData && (
|
||||||
<div className="absolute -left-[9999px] top-0 opacity-0" aria-hidden="true">
|
<div className="hidden print:block print:w-[210mm] print:mx-auto" aria-hidden="true">
|
||||||
<PrintableReport reports={reportsData} />
|
<PrintableReport reports={reportsData} />
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export const PrintableReport: React.FC<PrintableReportProps> = ({ reports }) =>
|
|||||||
style={{ width: '210mm', background: 'white' }}
|
style={{ width: '210mm', background: 'white' }}
|
||||||
>
|
>
|
||||||
{reports.map((report, idx) => (
|
{reports.map((report, idx) => (
|
||||||
<div key={idx} className="report-page pdf-export bg-white" style={{ minHeight: '297mm' }}>
|
<div key={idx} className="report-page bg-white" style={{ minHeight: '297mm' }}>
|
||||||
<ReportDisplay report={report} />
|
<ReportDisplay report={report} />
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
|
|||||||
@@ -30,21 +30,38 @@
|
|||||||
animation: fade-in 0.5s ease-out forwards;
|
animation: fade-in 0.5s ease-out forwards;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Force black text for PDF generation */
|
/* High-quality native browser printing */
|
||||||
.pdf-export .text-slate-400,
|
@media print {
|
||||||
.pdf-export .text-slate-500,
|
* {
|
||||||
.pdf-export .text-slate-600,
|
-webkit-print-color-adjust: exact !important;
|
||||||
.pdf-export .text-slate-700,
|
print-color-adjust: exact !important;
|
||||||
.pdf-export .text-slate-800,
|
}
|
||||||
.pdf-export .text-slate-900,
|
|
||||||
.pdf-export .text-slate-300,
|
|
||||||
.pdf-export .text-slate-200 {
|
|
||||||
color: #000000 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Also ensure borders are clearly visible */
|
@page {
|
||||||
.pdf-export .border-slate-100,
|
margin: 0;
|
||||||
.pdf-export .border-slate-200,
|
size: A4;
|
||||||
.pdf-export .border-slate-50 {
|
}
|
||||||
border-color: #cbd5e1 !important; /* slate-300 */
|
|
||||||
|
body {
|
||||||
|
background: white !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Force black text for PDF generation */
|
||||||
|
.report-page .text-slate-400,
|
||||||
|
.report-page .text-slate-500,
|
||||||
|
.report-page .text-slate-600,
|
||||||
|
.report-page .text-slate-700,
|
||||||
|
.report-page .text-slate-800,
|
||||||
|
.report-page .text-slate-900,
|
||||||
|
.report-page .text-slate-300,
|
||||||
|
.report-page .text-slate-200 {
|
||||||
|
color: #000000 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Also ensure borders are clearly visible */
|
||||||
|
.report-page .border-slate-100,
|
||||||
|
.report-page .border-slate-200,
|
||||||
|
.report-page .border-slate-50 {
|
||||||
|
border-color: #cbd5e1 !important; /* slate-300 */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user