Browse Source

pdf 水印处理

xyxie 3 months ago
parent
commit
1303c4224e
1 changed files with 39 additions and 13 deletions
  1. 39 13
      services/file.go

+ 39 - 13
services/file.go

@@ -12,6 +12,7 @@ import (
 	"github.com/pdfcpu/pdfcpu/pkg/pdfcpu/model"
 	"github.com/pdfcpu/pdfcpu/pkg/pdfcpu/types"
 	"io"
+	"math"
 	"mime/multipart"
 	"os"
 	"os/exec"
@@ -212,22 +213,47 @@ func GeneralWaterMarkPdf(pdfPath, waterMarkStr string) (f2 *bytes.Buffer, err er
 	}()
 
 	f2 = &bytes.Buffer{}
+	points := "24" //字号大小
+	rows := 6      //行数
+	// 处理文字
+	textLen := len(waterMarkStr)
+	count := int(math.Round(250.0 / (float64(textLen) + 18)))
+	if textLen > 102 {
+		count = 1
+	}
+	if textLen > 210 {
+		points = "20"
+		rows = 7
+	}
+	var sb1 strings.Builder
+	for i := 0; i < count; i++ {
+		sb1.WriteString(waterMarkStr)
+	}
 
-	//strList := []string{waterMarkStr, waterMarkStr, waterMarkStr, waterMarkStr, waterMarkStr, waterMarkStr}
-	strList := []string{waterMarkStr, waterMarkStr, waterMarkStr, waterMarkStr}
-	//strList := []string{waterMarkStr}
-	newWaterMarkStr := strings.Join(strList, "  ")
-	wmList := make([]*model.Watermark, 0)
-	for i := types.TopLeft; i <= 9; i++ {
-		wm, tmpErr := api.TextWatermark(newWaterMarkStr, "fo:SimHei, points:48, col: 0.75 0.75 0.75, rot:45, scale:1 abs, opacity:0.3", onTop, update, types.POINTS)
-		if tmpErr != nil {
-			fmt.Println("TextWatermark err:", tmpErr)
-			return
+	//单行文字制作完成
+	sb1Str := sb1.String()
+	//拼接成多行文字
+	var sb2 strings.Builder
+	lineSpace := "\n \n \n \n \n \n"
+
+	for i := 0; i < rows; i++ {
+		sb2.WriteString(sb1Str)
+		if i < rows-1 {
+			sb2.WriteString(lineSpace)
 		}
-		//wm.Pos = types.Center
-		wm.Pos = i
-		wmList = append(wmList, wm)
+
 	}
+	wmList := make([]*model.Watermark, 0)
+	//for i := types.TopLeft; i <= 9; i++ {
+	wm, tmpErr := api.TextWatermark(sb2.String(), "fo:SimHei, points:"+points+", col: 0.75 0.75 0.75, scale:1 abs, opacity:0.3", onTop, update, types.POINTS)
+	if tmpErr != nil {
+		fmt.Println("TextWatermark err:", tmpErr)
+		return
+	}
+	//wm.Pos = types.Center
+	wm.Pos = types.TopCenter
+	wmList = append(wmList, wm)
+	//}
 
 	err = AddWatermarks(f1, f2, nil, wmList, nil)