This commit is contained in:
Mrx
2026-03-16 12:32:41 +08:00
parent 09db8d003e
commit 14b2c53eeb
5 changed files with 394 additions and 75 deletions

View File

@@ -153,18 +153,23 @@ func (g *PDFGeneratorRefactored) generatePDF(product *entities.Product, doc *ent
pdf := gofpdf.New("P", "mm", "A4", "")
// 上边距与 ContentStartYBelowHeader 一致,这样自动分页后新页内容从 logo 下方开始,不被遮挡
pdf.SetMargins(15, ContentStartYBelowHeader, 15)
// 开启自动分页并预留底边距,避免内容贴底;分页后由 SetHeaderFunc 绘制页眉,正文从 ContentStartYBelowHeader 起排
pdf.SetAutoPageBreak(true, 18)
// 加载黑体字体(用于所有内容,除了水印)
// 注意:此时工作目录应该是根目录(/这样gofpdf处理路径时就能正确解析
chineseFontAvailable := g.fontManager.LoadChineseFont(pdf)
// 加载水印字体(使用宋体或其他非黑体字体)
// 加载水印字体
watermarkFontAvailable := g.fontManager.LoadWatermarkFont(pdf)
// 加载正文宋体(描述、详情、说明、表格文字等使用小四 12pt
bodyFontAvailable := g.fontManager.LoadBodyFont(pdf)
// 记录字体加载状态,便于诊断问题
g.logger.Info("PDF字体加载状态",
zap.Bool("chinese_font_loaded", chineseFontAvailable),
zap.Bool("watermark_font_loaded", watermarkFontAvailable),
zap.Bool("body_font_loaded", bodyFontAvailable),
zap.String("watermark_text", g.watermarkText),
)
@@ -176,9 +181,11 @@ func (g *PDFGeneratorRefactored) generatePDF(product *entities.Product, doc *ent
// 创建页面构建器
pageBuilder := NewPageBuilder(g.logger, g.fontManager, g.textProcessor, g.markdownProc, g.tableParser, g.tableRenderer, g.jsonProcessor, g.logoPath, g.watermarkText)
// 使用 SetHeaderFunc 确保每页(包括表格等内部调用 AddPage 的页)都会先绘制页眉+水印
// 页眉只绘制 logo 和横线;水印改到页脚绘制,确保水印在最上层不被表格等内容遮挡
pdf.SetHeaderFunc(func() {
pageBuilder.addHeader(pdf, chineseFontAvailable)
})
pdf.SetFooterFunc(func() {
pageBuilder.addWatermark(pdf, chineseFontAvailable)
})