diff --git a/src/server/services/PdfService.ts b/src/server/services/PdfService.ts
index d7584f9..d3e97fa 100644
--- a/src/server/services/PdfService.ts
+++ b/src/server/services/PdfService.ts
@@ -2,51 +2,37 @@ import puppeteer from 'puppeteer';
import { prisma } from '../prismaClient';
// Função utilitária para converter pixels em milímetros (1px ≈ 0.264583 mm)
-function pxToMm(px: number): string {
+function pxToMm(px: number | null | undefined): string {
+ if (!px) return '0mm';
return (px * 0.264583).toFixed(2) + 'mm';
}
export class PdfService {
+ // Busca configuração do documento, usando apenas campos válidos do schema
private async getConfiguracao() {
try {
- // Buscar configuração ou usar valores padrão
const config = await prisma.configuracaoDocumento.findFirst({
orderBy: { criadoEm: 'desc' },
select: {
id: true,
- headerImageUrl: true,
- footerImageUrl: true,
- logoUrl: true,
timbradoUrl: true,
timbradoMarginTop: true,
timbradoMarginBottom: true,
timbradoMarginLeft: true,
timbradoMarginRight: true,
- cabecalhoHtml: true,
- rodapeHtml: true,
+ templatePadrao: true,
+ margensTemplate: true,
criadoEm: true
}
});
-
- // Retornar configuração padrão se não existir
+ // Retorna configuração padrão se não existir
return {
- cabecalhoHtml: config?.cabecalhoHtml || `
-
-
{{escritorio.nome}}
-
- `,
- rodapeHtml: config?.rodapeHtml || `
-
- {{escritorio.endereco}}
- Tel: {{escritorio.telefone}} | Email: {{escritorio.email}}
-
- `,
- logoUrl: config?.logoUrl || '',
timbradoUrl: config?.timbradoUrl || '',
- timbradoMarginTop: config?.timbradoMarginTop || 100,
- timbradoMarginBottom: config?.timbradoMarginBottom || 50,
- timbradoMarginLeft: config?.timbradoMarginLeft || 50,
- timbradoMarginRight: config?.timbradoMarginRight || 50
+ timbradoMarginTop: config?.timbradoMarginTop ?? 100,
+ timbradoMarginBottom: config?.timbradoMarginBottom ?? 50,
+ timbradoMarginLeft: config?.timbradoMarginLeft ?? 50,
+ timbradoMarginRight: config?.timbradoMarginRight ?? 50,
+ templatePadrao: config?.templatePadrao || '',
};
} catch (error) {
console.error('Erro ao buscar configuração:', error);
@@ -54,12 +40,11 @@ export class PdfService {
}
}
+ // Gera HTML com timbrado e margens
private gerarHTML(content: string, config: any) {
- const timbradoUrl = config.timbradoUrl
+ const timbradoUrl = config.timbradoUrl
? `${process.env.FRONTEND_URL || 'http://localhost:5000'}${config.timbradoUrl}`
: '';
-
- // CSS para background em todas as páginas
return `
@@ -116,21 +101,18 @@ export class PdfService {
`;
}
- async gerarPDF(conteudo: string, escritorio: any) {
+ // Gera PDF a partir do HTML, respeitando margens e timbrado
+ async gerarPDF(conteudo: string) {
try {
const config = await this.getConfiguracao();
- const html = this.gerarHTML(conteudo, config);
-
- const browser = await puppeteer.launch({
- headless: 'new',
- args: ['--no-sandbox']
- });
+ // Usa templatePadrao se não houver conteúdo
+ const html = this.gerarHTML(conteudo || config.templatePadrao, config);
+ const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox'] });
const page = await browser.newPage();
await page.setContent(html, {
waitUntil: ['networkidle0', 'load'],
timeout: 30000
});
- // Margens convertidas para mm
const margin = {
top: pxToMm(config.timbradoMarginTop),
bottom: pxToMm(config.timbradoMarginBottom),