I want to make the watermark evenly cover the entire PDF page by setting parameters such as the number of rows, columns, row spacing, column spacing, and font size. However, adjusting any of the first few parameters will cause the watermark to fail to be added or cannot evenly cover the entire page. What should I do? this is my code, how should I modify it?
func repeatWatermark(watermark string, setting map[string]string) string {
column, row, cs, rs := mgr.parserColRow(watermark, setting)
var sb1 strings.Builder
for i := 0; i < column; i++ {
sb1.WriteString(watermark)
if i < column-1 {
sb1.WriteString(strings.Repeat(" ", cs))
}
}
sb1Str := sb1.String()
var sb2 strings.Builder
for i := 0; i < row; i++ {
sb2.WriteString(sb1Str)
if i < row-1 {
sb2.WriteString(strings.Repeat("\n", rs))
}
}
return sb2.String()
}
var FontMaps = map[string]string{
"宋体": "SimSun",
"微软雅黑": "MicrosoftYaHei",
}
func setWatermakr(setting map[string]string) string {
fontName := "SimSun"
fontSize := "20"
fontColor := "black"
fontOpacity := "0.3"
fontRotation := "45"
fontScale := "1.1"
fontAlign := "center"
if len(setting) != 0 {
if setting["fontName"] != "" {
if fn, ok := FontMaps[setting["fontName"]]; ok {
fontName = fn
}
}
if setting["fontSize"] != "" {
fontSize = setting["fontSize"]
}
if setting["fontColor"] != "" {
fontColor = setting["fontColor"]
}
if setting["fontOpacity"] != "" {
fontOpacity = setting["fontOpacity"]
}
if setting["fontRotation"] != "" {
fontRotation = setting["fontRotation"]
}
if setting["fontScale"] != "" {
fontScale = setting["fontScale"]
}
if setting["fontAlign"] != "" {
fontAlign = setting["fontAlign"]
}
}
return fmt.Sprintf("fontname:%s,points:%s,color:%s,opacity:%s,rot:%s,scale:%s abs,aligntext:%s",
fontName, fontSize, fontColor, fontOpacity, fontRotation, fontScale, fontAlign)
}
func addWatermark(parentDir string, pdf string, watermark string, setting map[string]string) (string, error) {
output := filepath.Join(filepath.Dir(pdf), "watermark.pdf")
font.UserFontDir = filepath.Join(parentDir, "fonts")
font.LoadUserFonts()
// api.LoadConfiguration()
// err := api.InstallFonts([]string{"simsun.ttc"})
// if err != nil {
// logs.Sugar().Errorf("install font err: %v", err)
// return pdf, err
// }
fonts, err := api.ListFonts()
if err != nil {
logs.Sugar().Errorf("list fonts err: %v", err)
}
logs.Sugar().Infof("list fonts:%v", fonts)
desc := mgr.setWatermakr(setting)
fullWatermark := mgr.repeatWatermark(watermark, setting)
wm, err := api.TextWatermark(fullWatermark, desc, true, true, types.POINTS)
if err != nil {
logs.Sugar().Errorf("TextWatermark err: %v", err)
return pdf, err
}
if err := api.AddWatermarksFile(pdf, output, nil, wm, nil); err != nil {
logs.Sugar().Errorf("AddWatermarksFile err: %v", err)
return pdf, err
}
logs.Sugar().Infof("pdf %s add watermark success", pdf)
return output, nil
}