diff --git a/pkg/utils/pdf.go b/pkg/utils/pdf.go index a89ff51..ff65f56 100644 --- a/pkg/utils/pdf.go +++ b/pkg/utils/pdf.go @@ -129,6 +129,30 @@ func GeneratePDF(text, imageURL, outputPath, fontPath string) error { imageX := (210.0 - imageWidth) / 2 currentY := pdf.GetY() + // 注册图片并获取原始尺寸,用于计算缩放后的高度 + imgInfo := pdf.RegisterImageOptions(tmpFile.Name(), gofpdf.ImageOptions{}) + if imgInfo == nil { + return fmt.Errorf("注册图片失败") + } + + // 计算缩放后的图片高度(按比例缩放) + // 原始宽度:原始高度 = 缩放后宽度:缩放后高度 + originalWidth, originalHeight := imgInfo.Extent() + imageHeight := (imageWidth / originalWidth) * originalHeight + + // A4页面高度297mm,底部边距10mm,计算可用的最大Y坐标 + pageHeight := 297.0 + bottomMargin := 10.0 + maxY := pageHeight - bottomMargin + + // 检查当前页面剩余空间是否足够放下图片 + // 如果图片底部会超出页面可用区域,则添加新页面 + if currentY+imageHeight > maxY { + pdf.AddPage() + // 新页面从顶部边距开始 + currentY = 10.0 + } + // 添加图片 // ImageOptions参数:图片路径、x坐标、y坐标、宽度、高度、是否流式布局、选项、链接 // 高度设为0表示按比例自动计算