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
let font = await pdfDoc.embedFont(StandardFonts.Helvetica);
let fontBold = font, fontItalic = font, fontBoldItalic = font;
let font = null, fontBold = null, fontItalic = null, fontBoldItalic = null;
let useCustomFont = false;
try {
const firaPath = path.join(process.cwd(), 'public', 'fonts', 'FiraSans-Regular.ttf');
const firaBoldPath = path.join(process.cwd(), 'public', 'fonts', 'FiraSans-Bold.ttf');
const firaItalicPath = path.join(process.cwd(), 'public', 'fonts', 'FiraSans-Italic.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(firaBoldPath).catch(() => null),
fs.readFile(firaItalicPath).catch(() => null),
fs.readFile(firaBoldItalicPath).catch(() => null),
]);
if (fira) font = await pdfDoc.embedFont(fira);
if (firaBold) fontBold = await pdfDoc.embedFont(firaBold);
if (firaItalic) fontItalic = await pdfDoc.embedFont(firaItalic);
if (firaBoldItalic) fontBoldItalic = await pdfDoc.embedFont(firaBoldItalic);
if (fira) { font = await pdfDoc.embedFont(fira); useCustomFont = true; }
if (firaBoldBuf) fontBold = await pdfDoc.embedFont(firaBoldBuf);
if (firaItalicBuf) fontItalic = await pdfDoc.embedFont(firaItalicBuf);
if (firaBoldItalicBuf) fontBoldItalic = await pdfDoc.embedFont(firaBoldItalicBuf);
} 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
const blocks = parseHtmlToBlocks(conteudo);
@@ -426,8 +430,11 @@ export class PdfService {
if (block.styles.heading === 'h2') blockFontSize = 18;
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 width = usedFont.widthOfTextAtSize(block.text, blockFontSize);
let width = usedFont.widthOfTextAtSize(cleanText, blockFontSize);
// Centralização
if (block.styles.align === 'center' || block.styles.heading === 'h1') {
@@ -453,8 +460,8 @@ export class PdfService {
y = PAGE_HEIGHT - margens.top;
}
// Renderiza o texto
page.drawText(block.text, {
// Renderiza o texto (sem \n)
page.drawText(cleanText, {
x,
y,
size: blockFontSize,