fix
This commit is contained in:
@@ -76,23 +76,43 @@ func (fm *FontManager) LoadWatermarkFont(pdf *gofpdf.Fpdf) bool {
|
||||
func (fm *FontManager) tryAddFont(pdf *gofpdf.Fpdf, fontPath, fontName string) bool {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
// 静默处理,不记录日志
|
||||
fm.logger.Error("添加字体时发生panic",
|
||||
zap.String("font_path", fontPath),
|
||||
zap.String("font_name", fontName),
|
||||
zap.Any("panic_value", r),
|
||||
)
|
||||
}
|
||||
}()
|
||||
|
||||
// 检查文件是否存在
|
||||
if _, err := os.Stat(fontPath); err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
// 将相对路径转换为绝对路径(gofpdf在Output时需要绝对路径)
|
||||
// 确保路径是绝对路径
|
||||
absFontPath, err := filepath.Abs(fontPath)
|
||||
if err != nil {
|
||||
fm.logger.Warn("无法获取字体文件绝对路径",
|
||||
zap.String("font_path", fontPath),
|
||||
zap.Error(err),
|
||||
)
|
||||
absFontPath = fontPath
|
||||
}
|
||||
|
||||
// 再次检查绝对路径文件是否存在
|
||||
if _, err := os.Stat(absFontPath); err != nil {
|
||||
fm.logger.Debug("尝试添加字体",
|
||||
zap.String("font_path", absFontPath),
|
||||
zap.String("font_name", fontName),
|
||||
)
|
||||
|
||||
// 检查文件是否存在
|
||||
fileInfo, err := os.Stat(absFontPath)
|
||||
if err != nil {
|
||||
fm.logger.Debug("字体文件不存在",
|
||||
zap.String("font_path", absFontPath),
|
||||
zap.Error(err),
|
||||
)
|
||||
return false
|
||||
}
|
||||
|
||||
if !fileInfo.Mode().IsRegular() {
|
||||
fm.logger.Warn("字体路径不是普通文件",
|
||||
zap.String("font_path", absFontPath),
|
||||
)
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -104,9 +124,19 @@ func (fm *FontManager) tryAddFont(pdf *gofpdf.Fpdf, fontPath, fontName string) b
|
||||
pdf.SetFont(fontName, "", 12)
|
||||
testWidth := pdf.GetStringWidth("测试")
|
||||
if testWidth == 0 {
|
||||
fm.logger.Warn("字体加载后验证失败(测试文本宽度为0)",
|
||||
zap.String("font_path", absFontPath),
|
||||
zap.String("font_name", fontName),
|
||||
)
|
||||
return false
|
||||
}
|
||||
|
||||
fm.logger.Info("成功加载字体",
|
||||
zap.String("font_path", absFontPath),
|
||||
zap.String("font_name", fontName),
|
||||
zap.Float64("test_width", testWidth),
|
||||
)
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -136,16 +166,41 @@ func (fm *FontManager) getWatermarkFontPaths() []string {
|
||||
|
||||
// buildFontPaths 构建字体文件路径列表(仅从resources/pdf/fonts加载)
|
||||
func (fm *FontManager) buildFontPaths(fontNames []string) []string {
|
||||
var fontPaths []string
|
||||
|
||||
// 获取resources/pdf目录(使用统一的资源路径查找函数)
|
||||
resourcesPDFDir := GetResourcesPDFDir()
|
||||
fontsDir := filepath.Join(resourcesPDFDir, "fonts")
|
||||
|
||||
// 确保fontsDir是绝对路径
|
||||
absFontsDir, err := filepath.Abs(fontsDir)
|
||||
if err != nil {
|
||||
fm.logger.Warn("无法获取字体目录绝对路径",
|
||||
zap.String("fonts_dir", fontsDir),
|
||||
zap.Error(err),
|
||||
)
|
||||
absFontsDir = fontsDir
|
||||
}
|
||||
|
||||
fm.logger.Debug("查找字体文件",
|
||||
zap.String("resources_pdf_dir", resourcesPDFDir),
|
||||
zap.String("fonts_dir", absFontsDir),
|
||||
zap.Strings("font_names", fontNames),
|
||||
)
|
||||
|
||||
var fontPaths []string
|
||||
|
||||
// 只从resources/pdf/fonts目录加载
|
||||
for _, fontName := range fontNames {
|
||||
fontPath := filepath.Join(fontsDir, fontName)
|
||||
fontPaths = append(fontPaths, fontPath)
|
||||
fontPath := filepath.Join(absFontsDir, fontName)
|
||||
// 确保每个字体路径都是绝对路径
|
||||
absFontPath, err := filepath.Abs(fontPath)
|
||||
if err != nil {
|
||||
fm.logger.Debug("无法获取字体文件绝对路径",
|
||||
zap.String("font_path", fontPath),
|
||||
zap.Error(err),
|
||||
)
|
||||
absFontPath = fontPath
|
||||
}
|
||||
fontPaths = append(fontPaths, absFontPath)
|
||||
}
|
||||
|
||||
// 过滤出实际存在的字体文件
|
||||
@@ -154,9 +209,27 @@ func (fm *FontManager) buildFontPaths(fontNames []string) []string {
|
||||
fileInfo, err := os.Stat(fontPath)
|
||||
if err == nil && fileInfo.Mode().IsRegular() {
|
||||
existingFonts = append(existingFonts, fontPath)
|
||||
fm.logger.Debug("找到字体文件", zap.String("font_path", fontPath))
|
||||
} else {
|
||||
fm.logger.Debug("字体文件不存在",
|
||||
zap.String("font_path", fontPath),
|
||||
zap.Error(err),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
if len(existingFonts) == 0 {
|
||||
fm.logger.Warn("未找到任何字体文件",
|
||||
zap.String("fonts_dir", absFontsDir),
|
||||
zap.Strings("attempted_fonts", fontPaths),
|
||||
)
|
||||
} else {
|
||||
fm.logger.Info("找到字体文件",
|
||||
zap.Int("count", len(existingFonts)),
|
||||
zap.Strings("font_paths", existingFonts),
|
||||
)
|
||||
}
|
||||
|
||||
return existingFonts
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user