diff --git a/kernel/api/export.go b/kernel/api/export.go index 6b7f248b7..9bfc7f913 100644 --- a/kernel/api/export.go +++ b/kernel/api/export.go @@ -528,8 +528,8 @@ func processPDF(c *gin.Context) { merge = arg["merge"].(bool) } removeAssets := arg["removeAssets"].(bool) - //watermark := arg["watermark"].(bool) - err := model.ProcessPDF(id, path, merge, removeAssets, true) + watermark := arg["watermark"].(bool) + err := model.ProcessPDF(id, path, merge, removeAssets, watermark) if nil != err { ret.Code = -1 ret.Msg = err.Error() diff --git a/kernel/model/export.go b/kernel/model/export.go index acef34eb9..ebd1f0dc8 100644 --- a/kernel/model/export.go +++ b/kernel/model/export.go @@ -852,35 +852,6 @@ func processPDFWatermark(pdfCtx *pdfcpu.Context, watermark bool) { return } - desc := Conf.Export.PDFWatermarkDesc - descParts := strings.Split(desc, ",") - m := map[string]string{} - for _, descPart := range descParts { - kv := strings.Split(descPart, ":") - if 2 != len(kv) { - continue - } - m[kv[0]] = kv[1] - } - if "" == m["fontname"] { - m["fontname"] = "LXGWWenKaiLite-Regular" - } - descBuilder := bytes.Buffer{} - for k, v := range m { - descBuilder.WriteString(k) - descBuilder.WriteString(":") - descBuilder.WriteString(v) - descBuilder.WriteString(",") - } - desc = descBuilder.String() - desc = desc[:len(desc)-1] - - fontPath := filepath.Join(util.AppearancePath, "fonts", "LxgwWenKai-Lite-1.311", "LXGWWenKaiLite-Regular.ttf") - err := api.InstallFonts([]string{fontPath}) - if nil != err { - logging.LogErrorf("install font [%s] failed: %s", fontPath, err) - } - mode := "text" if gulu.File.IsExist(str) { if ".pdf" == strings.ToLower(filepath.Ext(str)) { @@ -890,9 +861,40 @@ func processPDFWatermark(pdfCtx *pdfcpu.Context, watermark bool) { } } + desc := Conf.Export.PDFWatermarkDesc + if "text" == mode && util.ContainsCJK(str) { + // 中日韩文本水印需要安装字体文件 + descParts := strings.Split(desc, ",") + m := map[string]string{} + for _, descPart := range descParts { + kv := strings.Split(descPart, ":") + if 2 != len(kv) { + continue + } + m[kv[0]] = kv[1] + } + m["fontname"] = "LXGWWenKaiLite-Regular" + descBuilder := bytes.Buffer{} + for k, v := range m { + descBuilder.WriteString(k) + descBuilder.WriteString(":") + descBuilder.WriteString(v) + descBuilder.WriteString(",") + } + desc = descBuilder.String() + desc = desc[:len(desc)-1] + + fontPath := filepath.Join(util.AppearancePath, "fonts", "LxgwWenKai-Lite-1.311", "LXGWWenKaiLite-Regular.ttf") + err := api.InstallFonts([]string{fontPath}) + if nil != err { + logging.LogErrorf("install font [%s] failed: %s", fontPath, err) + } + } + logging.LogInfof("add PDF watermark [mode=%s, str=%s, desc=%s]", mode, str, desc) var wm *pdfcpu.Watermark + var err error switch mode { case "text": wm, err = pdfcpu.ParseTextWatermarkDetails(str, desc, false, pdfcpu.POINTS) diff --git a/kernel/util/rune.go b/kernel/util/rune.go index d124a3acc..9f53be800 100644 --- a/kernel/util/rune.go +++ b/kernel/util/rune.go @@ -18,10 +18,23 @@ package util import ( "regexp" + "unicode" "github.com/88250/gulu" ) +func ContainsCJK(text string) bool { + for _, r := range text { + ret := unicode.Is(unicode.Han, r) || unicode.Is(unicode.Lm, r) || + unicode.Is(unicode.Hiragana, r) || unicode.Is(unicode.Katakana, r) || + unicode.Is(unicode.Hangul, r) + if ret { + return true + } + } + return false +} + var emojiRegex = regexp.MustCompile(`/([0-9#][\x{20E3}])|` + `[\x{00ae}\x{00a9}\x{203C}\x{2047}\x{2048}\x{2049}\x{3030}\x{303D}\x{2139}\x{2122}\x{3297}\x{3299}]|` + `[\x{2190}-\x{21FF}]|[\x{FE00}-\x{FEFF}]|` +