f
This commit is contained in:
@@ -30,6 +30,10 @@ func (r *DatabaseTableRenderer) RenderTable(pdf *gofpdf.Fpdf, tableData *TableDa
|
||||
r.logger.Warn("表格数据为空,跳过渲染")
|
||||
return nil
|
||||
}
|
||||
// 避免表格绘制在页眉区,防止遮挡 logo
|
||||
if pdf.GetY() < ContentStartYBelowHeader {
|
||||
pdf.SetY(ContentStartYBelowHeader)
|
||||
}
|
||||
|
||||
// 检查表头是否有有效内容
|
||||
hasValidHeader := false
|
||||
@@ -67,8 +71,13 @@ func (r *DatabaseTableRenderer) RenderTable(pdf *gofpdf.Fpdf, tableData *TableDa
|
||||
// 即使没有数据行,也渲染表头(单行表格)
|
||||
// 但如果没有表头也没有数据,则不渲染
|
||||
|
||||
// 设置字体
|
||||
r.fontManager.SetFont(pdf, "", 9)
|
||||
// 表格线细线(返回字段说明等表格线不要太粗)
|
||||
savedLineWidth := pdf.GetLineWidth()
|
||||
pdf.SetLineWidth(0.2)
|
||||
defer pdf.SetLineWidth(savedLineWidth)
|
||||
|
||||
// 正文字体:宋体小四 12pt
|
||||
r.fontManager.SetBodyFont(pdf, "", BodyFontSizeXiaosi)
|
||||
_, lineHt := pdf.GetFontSize()
|
||||
|
||||
// 计算页面可用宽度
|
||||
@@ -112,7 +121,7 @@ func (r *DatabaseTableRenderer) RenderTable(pdf *gofpdf.Fpdf, tableData *TableDa
|
||||
// 策略:先确保每列最短内容能完整显示(不换行),然后根据内容长度分配剩余空间
|
||||
func (r *DatabaseTableRenderer) calculateColumnWidths(pdf *gofpdf.Fpdf, tableData *TableData, availableWidth float64) []float64 {
|
||||
numCols := len(tableData.Headers)
|
||||
r.fontManager.SetFont(pdf, "", 9)
|
||||
r.fontManager.SetBodyFont(pdf, "", BodyFontSizeXiaosi)
|
||||
|
||||
// 第一步:找到每列中最短的内容(包括表头),计算其完整显示所需的最小宽度
|
||||
colMinWidths := make([]float64, numCols)
|
||||
@@ -362,8 +371,8 @@ func (r *DatabaseTableRenderer) renderHeader(pdf *gofpdf.Fpdf, headers []string,
|
||||
|
||||
// 绘制表头背景和文本
|
||||
pdf.SetFillColor(74, 144, 226) // 蓝色背景
|
||||
pdf.SetTextColor(0, 0, 0) // 黑色文字
|
||||
r.fontManager.SetFont(pdf, "B", 9)
|
||||
pdf.SetTextColor(0, 0, 0) // 黑色文字
|
||||
r.fontManager.SetBodyFont(pdf, "B", BodyFontSizeXiaosi)
|
||||
|
||||
currentX := 15.0
|
||||
for i, header := range headers {
|
||||
@@ -396,8 +405,7 @@ func (r *DatabaseTableRenderer) renderHeader(pdf *gofpdf.Fpdf, headers []string,
|
||||
pdf.SetXY(currentX+2, textStartY)
|
||||
// 确保颜色为深黑色(在渲染前再次设置,防止被覆盖)
|
||||
pdf.SetTextColor(0, 0, 0) // 表头是黑色文字
|
||||
// 设置字体,确保颜色不会变淡
|
||||
r.fontManager.SetFont(pdf, "B", 9)
|
||||
r.fontManager.SetBodyFont(pdf, "B", BodyFontSizeXiaosi)
|
||||
// 再次确保颜色为深黑色(在渲染前最后一次设置)
|
||||
pdf.SetTextColor(0, 0, 0)
|
||||
// 使用正常的行高,文本已经垂直居中(减少内边距,给文本更多空间)
|
||||
@@ -417,7 +425,7 @@ func (r *DatabaseTableRenderer) renderRows(pdf *gofpdf.Fpdf, rows [][]string, co
|
||||
numCols := len(colWidths)
|
||||
pdf.SetFillColor(245, 245, 220) // 米色背景
|
||||
pdf.SetTextColor(0, 0, 0) // 深黑色文字,确保清晰
|
||||
r.fontManager.SetFont(pdf, "", 9)
|
||||
r.fontManager.SetBodyFont(pdf, "", BodyFontSizeXiaosi)
|
||||
|
||||
// 获取页面尺寸和边距
|
||||
_, pageHeight := pdf.GetPageSize()
|
||||
@@ -575,8 +583,7 @@ func (r *DatabaseTableRenderer) renderRows(pdf *gofpdf.Fpdf, rows [][]string, co
|
||||
pdf.SetXY(currentX+2, textStartY)
|
||||
// 再次确保颜色为深黑色(防止被其他设置覆盖)
|
||||
pdf.SetTextColor(0, 0, 0)
|
||||
// 设置字体,确保颜色不会变淡
|
||||
r.fontManager.SetFont(pdf, "", 9)
|
||||
r.fontManager.SetBodyFont(pdf, "", BodyFontSizeXiaosi)
|
||||
// 再次确保颜色为深黑色(在渲染前最后一次设置)
|
||||
pdf.SetTextColor(0, 0, 0)
|
||||
// 安全地渲染文本,使用正常的行高
|
||||
|
||||
Reference in New Issue
Block a user