|
@@ -1,14 +1,21 @@
|
|
|
package services
|
|
|
|
|
|
import (
|
|
|
+ "bytes"
|
|
|
"errors"
|
|
|
"eta/eta_api/models"
|
|
|
"eta/eta_api/utils"
|
|
|
"fmt"
|
|
|
+ "github.com/pdfcpu/pdfcpu/pkg/api"
|
|
|
+ "github.com/pdfcpu/pdfcpu/pkg/font"
|
|
|
+ "github.com/pdfcpu/pdfcpu/pkg/pdfcpu"
|
|
|
+ "github.com/pdfcpu/pdfcpu/pkg/pdfcpu/model"
|
|
|
+ "github.com/pdfcpu/pdfcpu/pkg/pdfcpu/types"
|
|
|
"io"
|
|
|
"mime/multipart"
|
|
|
"os"
|
|
|
"os/exec"
|
|
|
+ "strings"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
@@ -179,3 +186,84 @@ func GetResourceUrlBySvgImg(imgData string) (resourceUrl string, err error, errM
|
|
|
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+func GeneralWaterMarkPdf(pdfPath, waterMarkStr string) (f2 *bytes.Buffer, err error) {
|
|
|
+ onTop := true
|
|
|
+ update := false
|
|
|
+ //fontDir := `C:\Users\123\go\src\eta\eta_api\static`
|
|
|
+ fontDir := `static`
|
|
|
+ font.UserFontDir = fontDir
|
|
|
+
|
|
|
+ ttfList := fontDir + `/SimHei.ttf`
|
|
|
+ err = api.InstallFonts([]string{ttfList})
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("InstallFonts err:", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ api.DisableConfigDir()
|
|
|
+
|
|
|
+ f1, err := os.Open(pdfPath)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("文件不存在")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer func() {
|
|
|
+ _ = f1.Close()
|
|
|
+ }()
|
|
|
+
|
|
|
+ f2 = &bytes.Buffer{}
|
|
|
+
|
|
|
+ //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
|
|
|
+ }
|
|
|
+ //wm.Pos = types.Center
|
|
|
+ wm.Pos = i
|
|
|
+ wmList = append(wmList, wm)
|
|
|
+ }
|
|
|
+
|
|
|
+ err = AddWatermarks(f1, f2, nil, wmList, nil)
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+func AddWatermarks(rs io.ReadSeeker, w io.Writer, selectedPages []string, wmList []*model.Watermark, conf *model.Configuration) error {
|
|
|
+ if rs == nil {
|
|
|
+ return errors.New("pdfcpu: AddWatermarks: missing rs")
|
|
|
+ }
|
|
|
+
|
|
|
+ if conf == nil {
|
|
|
+ conf = model.NewDefaultConfiguration()
|
|
|
+ }
|
|
|
+ conf.Cmd = model.ADDWATERMARKS
|
|
|
+ conf.OptimizeDuplicateContentStreams = false
|
|
|
+
|
|
|
+ if len(wmList) <= 0 {
|
|
|
+ return errors.New("pdfcpu: missing watermark configuration")
|
|
|
+ }
|
|
|
+
|
|
|
+ ctx, err := api.ReadValidateAndOptimize(rs, conf)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ var pages types.IntSet
|
|
|
+ pages, err = api.PagesForPageSelection(ctx.PageCount, selectedPages, true, true)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, wm := range wmList {
|
|
|
+ if err = pdfcpu.AddWatermarks(ctx, pages, wm); err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return api.Write(ctx, w, conf)
|
|
|
+}
|