tenta fix pdfservice.js

This commit is contained in:
rodrigo committed 2025-04-21 20:17:45 -03:00
1 parent 8a09720030
commit e91294df22
1 file changed
+17 -10
+17 -10
View File
@@ -375,24 +375,28 @@ export class PdfService {
} }
// Fonte Fira Sans (se disponível), senão Helvetica // Fonte Fira Sans (se disponível), senão Helvetica
let font = await pdfDoc.embedFont(StandardFonts.Helvetica); let font = null, fontBold = null, fontItalic = null, fontBoldItalic = null;
let fontBold = font, fontItalic = font, fontBoldItalic = font; let useCustomFont = false;
try { try {
const firaPath = path.join(process.cwd(), 'public', 'fonts', 'FiraSans-Regular.ttf'); const firaPath = path.join(process.cwd(), 'public', 'fonts', 'FiraSans-Regular.ttf');
const firaBoldPath = path.join(process.cwd(), 'public', 'fonts', 'FiraSans-Bold.ttf'); const firaBoldPath = path.join(process.cwd(), 'public', 'fonts', 'FiraSans-Bold.ttf');
const firaItalicPath = path.join(process.cwd(), 'public', 'fonts', 'FiraSans-Italic.ttf'); const firaItalicPath = path.join(process.cwd(), 'public', 'fonts', 'FiraSans-Italic.ttf');
const firaBoldItalicPath = path.join(process.cwd(), 'public', 'fonts', 'FiraSans-BoldItalic.ttf'); const firaBoldItalicPath = path.join(process.cwd(), 'public', 'fonts', 'FiraSans-BoldItalic.ttf');
const [fira, firaBold, firaItalic, firaBoldItalic] = await Promise.all([ const [fira, firaBoldBuf, firaItalicBuf, firaBoldItalicBuf] = await Promise.all([
fs.readFile(firaPath).catch(() => null), fs.readFile(firaPath).catch(() => null),
fs.readFile(firaBoldPath).catch(() => null), fs.readFile(firaBoldPath).catch(() => null),
fs.readFile(firaItalicPath).catch(() => null), fs.readFile(firaItalicPath).catch(() => null),
fs.readFile(firaBoldItalicPath).catch(() => null), fs.readFile(firaBoldItalicPath).catch(() => null),
]); ]);
if (fira) font = await pdfDoc.embedFont(fira); if (fira) { font = await pdfDoc.embedFont(fira); useCustomFont = true; }
if (firaBold) fontBold = await pdfDoc.embedFont(firaBold); if (firaBoldBuf) fontBold = await pdfDoc.embedFont(firaBoldBuf);
if (firaItalic) fontItalic = await pdfDoc.embedFont(firaItalic); if (firaItalicBuf) fontItalic = await pdfDoc.embedFont(firaItalicBuf);
if (firaBoldItalic) fontBoldItalic = await pdfDoc.embedFont(firaBoldItalic); if (firaBoldItalicBuf) fontBoldItalic = await pdfDoc.embedFont(firaBoldItalicBuf);
} catch { /* fallback para Helvetica */ } } catch { /* fallback para Helvetica */ }
if (!font) font = await pdfDoc.embedFont(StandardFonts.Helvetica);
if (!fontBold) fontBold = await pdfDoc.embedFont(StandardFonts.HelveticaBold);
if (!fontItalic) fontItalic = await pdfDoc.embedFont(StandardFonts.HelveticaOblique);
if (!fontBoldItalic) fontBoldItalic = fontBold;
// Parse TinyMCE HTML para blocos estilizados // Parse TinyMCE HTML para blocos estilizados
const blocks = parseHtmlToBlocks(conteudo); const blocks = parseHtmlToBlocks(conteudo);
@@ -426,8 +430,11 @@ export class PdfService {
if (block.styles.heading === 'h2') blockFontSize = 18; if (block.styles.heading === 'h2') blockFontSize = 18;
if (block.styles.heading === 'h3') blockFontSize = 16; if (block.styles.heading === 'h3') blockFontSize = 16;
// Remove quebras de linha do texto antes de medir e desenhar
const cleanText = (block.text || '').replace(/\r?\n/g, ' ');
let x = margens.left + (block.styles.indent ? FONT_SIZE * 2 : 0); let x = margens.left + (block.styles.indent ? FONT_SIZE * 2 : 0);
let width = usedFont.widthOfTextAtSize(block.text, blockFontSize); let width = usedFont.widthOfTextAtSize(cleanText, blockFontSize);
// Centralização // Centralização
if (block.styles.align === 'center' || block.styles.heading === 'h1') { if (block.styles.align === 'center' || block.styles.heading === 'h1') {
@@ -453,8 +460,8 @@ export class PdfService {
y = PAGE_HEIGHT - margens.top; y = PAGE_HEIGHT - margens.top;
} }
// Renderiza o texto // Renderiza o texto (sem \n)
page.drawText(block.text, { page.drawText(cleanText, {
x, x,
y, y,
size: blockFontSize, size: blockFontSize,