f
This commit is contained in:
@@ -16,6 +16,8 @@ type FontManager struct {
|
||||
chineseFontLoaded bool
|
||||
watermarkFontName string
|
||||
watermarkFontLoaded bool
|
||||
bodyFontName string
|
||||
bodyFontLoaded bool
|
||||
}
|
||||
|
||||
// NewFontManager 创建字体管理器
|
||||
@@ -24,6 +26,7 @@ func NewFontManager(logger *zap.Logger) *FontManager {
|
||||
logger: logger,
|
||||
chineseFontName: "ChineseFont",
|
||||
watermarkFontName: "WatermarkFont",
|
||||
bodyFontName: "BodyFont",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,6 +76,21 @@ func (fm *FontManager) LoadWatermarkFont(pdf *gofpdf.Fpdf) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// LoadBodyFont 加载正文用宋体(用于描述、详情、说明、表格文字等)
|
||||
func (fm *FontManager) LoadBodyFont(pdf *gofpdf.Fpdf) bool {
|
||||
if fm.bodyFontLoaded {
|
||||
return true
|
||||
}
|
||||
fontPaths := fm.getBodyFontPaths()
|
||||
for _, fontPath := range fontPaths {
|
||||
if fm.tryAddFont(pdf, fontPath, fm.bodyFontName) {
|
||||
fm.bodyFontLoaded = true
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// tryAddFont 尝试添加字体(统一处理中文字体和水印字体)
|
||||
func (fm *FontManager) tryAddFont(pdf *gofpdf.Fpdf, fontPath, fontName string) bool {
|
||||
defer func() {
|
||||
@@ -214,6 +232,18 @@ func (fm *FontManager) getWatermarkFontPaths() []string {
|
||||
return fm.buildFontPaths(fontNames)
|
||||
}
|
||||
|
||||
// getBodyFontPaths 获取正文宋体路径列表(小四对应 12pt)
|
||||
// 优先使用 resources/pdf/fonts/simsun.ttc(宋体)
|
||||
func (fm *FontManager) getBodyFontPaths() []string {
|
||||
fontNames := []string{
|
||||
// "simsun.ttc", // 宋体(项目内 resources/pdf/fonts)
|
||||
"simsun.ttf",
|
||||
"SimSun.ttf",
|
||||
"WenYuanSerifSC-Bold.ttf", // 文渊宋体风格,备选
|
||||
}
|
||||
return fm.buildFontPaths(fontNames)
|
||||
}
|
||||
|
||||
// buildFontPaths 构建字体文件路径列表(仅从resources/pdf/fonts加载)
|
||||
// 返回所有存在的字体文件的绝对路径
|
||||
func (fm *FontManager) buildFontPaths(fontNames []string) []string {
|
||||
@@ -297,6 +327,28 @@ func (fm *FontManager) SetWatermarkFont(pdf *gofpdf.Fpdf, style string, size flo
|
||||
}
|
||||
}
|
||||
|
||||
// BodyFontSizeXiaosi 正文小四字号(约 12pt)
|
||||
const BodyFontSizeXiaosi = 12.0
|
||||
|
||||
// SetBodyFont 设置正文字体(宋体小四:描述、详情、说明、表格文字等)
|
||||
func (fm *FontManager) SetBodyFont(pdf *gofpdf.Fpdf, style string, size float64) {
|
||||
if size <= 0 {
|
||||
size = BodyFontSizeXiaosi
|
||||
}
|
||||
if fm.bodyFontLoaded {
|
||||
pdf.SetFont(fm.bodyFontName, style, size)
|
||||
} else if fm.watermarkFontLoaded {
|
||||
pdf.SetFont(fm.watermarkFontName, style, size)
|
||||
} else {
|
||||
fm.SetFont(pdf, style, size)
|
||||
}
|
||||
}
|
||||
|
||||
// IsBodyFontAvailable 正文字体(宋体)是否已加载
|
||||
func (fm *FontManager) IsBodyFontAvailable() bool {
|
||||
return fm.bodyFontLoaded || fm.watermarkFontLoaded
|
||||
}
|
||||
|
||||
// IsChineseFontAvailable 检查中文字体是否可用
|
||||
func (fm *FontManager) IsChineseFontAvailable() bool {
|
||||
return fm.chineseFontLoaded
|
||||
|
||||
Reference in New Issue
Block a user