Support adding the watermark on export PDF https://github.com/siyuan-note/siyuan/issues/9961

This commit is contained in:
Daniel 2023-12-27 11:43:21 +08:00
parent efac191a82
commit 2ff2f1972e
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
3 changed files with 46 additions and 31 deletions

View file

@ -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()

View file

@ -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)

View file

@ -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}]|` +