From 99d4ad4bd4965ff236eeaf9d4081c446c0617fd0 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 24 Apr 2025 20:48:16 +0800 Subject: [PATCH] :art: Improve export PDF watermark font https://github.com/siyuan-note/siyuan/issues/14693 --- kernel/go.mod | 2 +- kernel/go.sum | 4 ++-- kernel/model/export.go | 48 ++++++++++++++++++++++++++++++++++++------ 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/kernel/go.mod b/kernel/go.mod index 170492187..3f7d8d979 100644 --- a/kernel/go.mod +++ b/kernel/go.mod @@ -197,7 +197,7 @@ require ( replace github.com/mattn/go-sqlite3 => github.com/88250/go-sqlite3 v1.14.13-0.20231214121541-e7f54c482950 -replace github.com/pdfcpu/pdfcpu => github.com/88250/pdfcpu v0.3.14-0.20241201033812-5a93b7586a01 +replace github.com/pdfcpu/pdfcpu => github.com/88250/pdfcpu v0.3.14-0.20250424122812-f10e8d9d8d46 //replace github.com/88250/lute => F:\golang\gopath\src\github.com\88250\lute //replace github.com/siyuan-note/dejavu => D:\88250\dejavu diff --git a/kernel/go.sum b/kernel/go.sum index d7f98b047..ba9aff6dd 100644 --- a/kernel/go.sum +++ b/kernel/go.sum @@ -16,8 +16,8 @@ github.com/88250/gulu v1.2.3-0.20250227144607-7f4570b0d689 h1:39y5g7vnFAIcXhTN3I github.com/88250/gulu v1.2.3-0.20250227144607-7f4570b0d689/go.mod h1:c8uVw25vW2W4dhJ/j4iYsX5H1hc19spim266jO5x2hU= github.com/88250/lute v1.7.7-0.20250423133018-cff81864be77 h1:Ky/O9dd9CJ6UZ4Ye8aWpycdlSuYtUKis5UuZLvsRa4w= github.com/88250/lute v1.7.7-0.20250423133018-cff81864be77/go.mod h1:WYyUw//5yVw9BJnoVjx7rI/3szsISxNZCYGOqTIrV0o= -github.com/88250/pdfcpu v0.3.14-0.20241201033812-5a93b7586a01 h1:AcFe63RXjIh1XtX/dc4Es3U8bYKjlEkvavHd1nFBOHM= -github.com/88250/pdfcpu v0.3.14-0.20241201033812-5a93b7586a01/go.mod h1:fVfOloBzs2+W2VJCCbq60XIxc3yJHAZ0Gahv1oO0gyI= +github.com/88250/pdfcpu v0.3.14-0.20250424122812-f10e8d9d8d46 h1:Bq1JsDfVbHKUxNL/B2JXd8cC/1h6aFjrlXpGycnh0Hk= +github.com/88250/pdfcpu v0.3.14-0.20250424122812-f10e8d9d8d46/go.mod h1:fVfOloBzs2+W2VJCCbq60XIxc3yJHAZ0Gahv1oO0gyI= github.com/88250/vitess-sqlparser v0.0.0-20210205111146-56a2ded2aba1 h1:48T899JQDwyyRu9yXHePYlPdHtpJfrJEUGBMH3SMBWY= github.com/88250/vitess-sqlparser v0.0.0-20210205111146-56a2ded2aba1/go.mod h1:U3pckKQIgxxkmZjV5yXQjHdGxQK0o/vEZeZ6cQsxfHw= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= diff --git a/kernel/model/export.go b/kernel/model/export.go index e8fb80fa6..e7459201c 100644 --- a/kernel/model/export.go +++ b/kernel/model/export.go @@ -1041,6 +1041,10 @@ func ProcessPDF(id, p string, merge, removeAssets, watermark bool) (err error) { logging.LogErrorf("mkdir [%s] failed: %s", font.UserFontDir, mkdirErr) return } + if loadErr := api.LoadUserFonts(); nil != loadErr { + logging.LogErrorf("load user fonts failed: %s", loadErr) + } + pdfCtx, ctxErr := api.ReadContextFile(p) if nil != ctxErr { logging.LogErrorf("read pdf context failed: %s", ctxErr) @@ -1098,7 +1102,43 @@ func processPDFWatermark(pdfCtx *model.Context, watermark bool) { } m[kv[0]] = kv[1] } - m["fontname"] = "LXGWWenKaiLite-Regular" + + useDefaultFont := true + if "" != m["fontname"] { + listFonts, e := api.ListFonts() + var builtInFontNames []string + if nil != e { + logging.LogInfof("listFont failed: %s", e) + } else { + for _, f := range listFonts { + if strings.Contains(f, "(") { + f = f[:strings.Index(f, "(")] + } + f = strings.TrimSpace(f) + if strings.Contains(f, ":") || "" == f || strings.Contains(f, "Corefonts") || strings.Contains(f, "Userfonts") { + continue + } + + builtInFontNames = append(builtInFontNames, f) + } + + for _, font := range builtInFontNames { + if font == m["fontname"] { + useDefaultFont = false + break + } + } + } + } + if useDefaultFont { + m["fontname"] = "LXGWWenKaiLite-Regular" + fontPath := filepath.Join(util.AppearancePath, "fonts", "LxgwWenKai-Lite-1.501", "LXGWWenKaiLite-Regular.ttf") + err := api.InstallFonts([]string{fontPath}) + if err != nil { + logging.LogErrorf("install font [%s] failed: %s", fontPath, err) + } + } + descBuilder := bytes.Buffer{} for k, v := range m { descBuilder.WriteString(k) @@ -1108,12 +1148,6 @@ func processPDFWatermark(pdfCtx *model.Context, watermark bool) { } desc = descBuilder.String() desc = desc[:len(desc)-1] - - fontPath := filepath.Join(util.AppearancePath, "fonts", "LxgwWenKai-Lite-1.501", "LXGWWenKaiLite-Regular.ttf") - err := api.InstallFonts([]string{fontPath}) - if err != nil { - logging.LogErrorf("install font [%s] failed: %s", fontPath, err) - } } logging.LogInfof("add PDF watermark [mode=%s, str=%s, desc=%s]", mode, str, desc)