mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-18 15:40:12 +01:00
✨ Support adding the watermark on export PDF https://github.com/siyuan-note/siyuan/issues/9961
This commit is contained in:
parent
efac191a82
commit
2ff2f1972e
3 changed files with 46 additions and 31 deletions
|
|
@ -528,8 +528,8 @@ func processPDF(c *gin.Context) {
|
||||||
merge = arg["merge"].(bool)
|
merge = arg["merge"].(bool)
|
||||||
}
|
}
|
||||||
removeAssets := arg["removeAssets"].(bool)
|
removeAssets := arg["removeAssets"].(bool)
|
||||||
//watermark := arg["watermark"].(bool)
|
watermark := arg["watermark"].(bool)
|
||||||
err := model.ProcessPDF(id, path, merge, removeAssets, true)
|
err := model.ProcessPDF(id, path, merge, removeAssets, watermark)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
ret.Code = -1
|
ret.Code = -1
|
||||||
ret.Msg = err.Error()
|
ret.Msg = err.Error()
|
||||||
|
|
|
||||||
|
|
@ -852,7 +852,18 @@ func processPDFWatermark(pdfCtx *pdfcpu.Context, watermark bool) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mode := "text"
|
||||||
|
if gulu.File.IsExist(str) {
|
||||||
|
if ".pdf" == strings.ToLower(filepath.Ext(str)) {
|
||||||
|
mode = "pdf"
|
||||||
|
} else {
|
||||||
|
mode = "image"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
desc := Conf.Export.PDFWatermarkDesc
|
desc := Conf.Export.PDFWatermarkDesc
|
||||||
|
if "text" == mode && util.ContainsCJK(str) {
|
||||||
|
// 中日韩文本水印需要安装字体文件
|
||||||
descParts := strings.Split(desc, ",")
|
descParts := strings.Split(desc, ",")
|
||||||
m := map[string]string{}
|
m := map[string]string{}
|
||||||
for _, descPart := range descParts {
|
for _, descPart := range descParts {
|
||||||
|
|
@ -862,9 +873,7 @@ func processPDFWatermark(pdfCtx *pdfcpu.Context, watermark bool) {
|
||||||
}
|
}
|
||||||
m[kv[0]] = kv[1]
|
m[kv[0]] = kv[1]
|
||||||
}
|
}
|
||||||
if "" == m["fontname"] {
|
|
||||||
m["fontname"] = "LXGWWenKaiLite-Regular"
|
m["fontname"] = "LXGWWenKaiLite-Regular"
|
||||||
}
|
|
||||||
descBuilder := bytes.Buffer{}
|
descBuilder := bytes.Buffer{}
|
||||||
for k, v := range m {
|
for k, v := range m {
|
||||||
descBuilder.WriteString(k)
|
descBuilder.WriteString(k)
|
||||||
|
|
@ -880,19 +889,12 @@ func processPDFWatermark(pdfCtx *pdfcpu.Context, watermark bool) {
|
||||||
if nil != err {
|
if nil != err {
|
||||||
logging.LogErrorf("install font [%s] failed: %s", fontPath, err)
|
logging.LogErrorf("install font [%s] failed: %s", fontPath, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
mode := "text"
|
|
||||||
if gulu.File.IsExist(str) {
|
|
||||||
if ".pdf" == strings.ToLower(filepath.Ext(str)) {
|
|
||||||
mode = "pdf"
|
|
||||||
} else {
|
|
||||||
mode = "image"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
logging.LogInfof("add PDF watermark [mode=%s, str=%s, desc=%s]", mode, str, desc)
|
logging.LogInfof("add PDF watermark [mode=%s, str=%s, desc=%s]", mode, str, desc)
|
||||||
|
|
||||||
var wm *pdfcpu.Watermark
|
var wm *pdfcpu.Watermark
|
||||||
|
var err error
|
||||||
switch mode {
|
switch mode {
|
||||||
case "text":
|
case "text":
|
||||||
wm, err = pdfcpu.ParseTextWatermarkDetails(str, desc, false, pdfcpu.POINTS)
|
wm, err = pdfcpu.ParseTextWatermarkDetails(str, desc, false, pdfcpu.POINTS)
|
||||||
|
|
|
||||||
|
|
@ -18,10 +18,23 @@ package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"regexp"
|
"regexp"
|
||||||
|
"unicode"
|
||||||
|
|
||||||
"github.com/88250/gulu"
|
"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}])|` +
|
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{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}]|` +
|
`[\x{2190}-\x{21FF}]|[\x{FE00}-\x{FEFF}]|` +
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue