mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-01-17 06:05:29 +01:00
🎨 Improve handling of assets when exporting to Word .docx format https://github.com/siyuan-note/siyuan/issues/15253
Signed-off-by: Daniel <845765@qq.com>
This commit is contained in:
parent
2e9ef1e028
commit
4bc9d9496e
2 changed files with 29 additions and 30 deletions
|
|
@ -187,10 +187,6 @@ func NetAssets2LocalAssets(rootID string, onlyImg bool, originalURL string) (err
|
|||
return
|
||||
}
|
||||
|
||||
var files int
|
||||
var size int64
|
||||
msgId := gulu.Rand.String(7)
|
||||
|
||||
docDirLocalPath := filepath.Join(util.DataDir, tree.Box, path.Dir(tree.Path))
|
||||
assetsDirPath := getAssetsDir(filepath.Join(util.DataDir, tree.Box), docDirLocalPath)
|
||||
if !gulu.File.IsExist(assetsDirPath) {
|
||||
|
|
@ -199,6 +195,15 @@ func NetAssets2LocalAssets(rootID string, onlyImg bool, originalURL string) (err
|
|||
}
|
||||
}
|
||||
|
||||
err = netAssets2LocalAssets0(tree, onlyImg, originalURL, assetsDirPath, true)
|
||||
return
|
||||
}
|
||||
|
||||
func netAssets2LocalAssets0(tree *parse.Tree, onlyImg bool, originalURL string, assetsDirPath string, needWriteTree bool) (err error) {
|
||||
var files int
|
||||
var size int64
|
||||
msgId := gulu.Rand.String(7)
|
||||
|
||||
browserClient := util.NewCustomReqClient() // 自定义了 TLS 指纹,增加下载成功率
|
||||
|
||||
forbiddenCount := 0
|
||||
|
|
@ -284,6 +289,7 @@ func NetAssets2LocalAssets(rootID string, onlyImg bool, originalURL string) (err
|
|||
if 64 < len(displayU) {
|
||||
displayU = displayU[:64] + "..."
|
||||
}
|
||||
|
||||
util.PushUpdateMsg(msgId, fmt.Sprintf(Conf.Language(119), displayU), 15000)
|
||||
request := browserClient.R()
|
||||
request.SetRetryCount(1).SetRetryFixedInterval(3 * time.Second)
|
||||
|
|
@ -365,21 +371,24 @@ func NetAssets2LocalAssets(rootID string, onlyImg bool, originalURL string) (err
|
|||
}
|
||||
|
||||
util.PushClearMsg(msgId)
|
||||
if 0 < files {
|
||||
msgId = util.PushMsg(Conf.Language(113), 7000)
|
||||
if err = writeTreeUpsertQueue(tree); err != nil {
|
||||
return
|
||||
}
|
||||
util.PushUpdateMsg(msgId, fmt.Sprintf(Conf.Language(120), files, humanize.BytesCustomCeil(uint64(size), 2)), 5000)
|
||||
|
||||
if 0 < forbiddenCount {
|
||||
util.PushErrMsg(fmt.Sprintf(Conf.Language(255), forbiddenCount), 5000)
|
||||
}
|
||||
} else {
|
||||
if 0 < forbiddenCount {
|
||||
util.PushErrMsg(fmt.Sprintf(Conf.Language(255), forbiddenCount), 5000)
|
||||
if needWriteTree {
|
||||
if 0 < files {
|
||||
msgId = util.PushMsg(Conf.Language(113), 7000)
|
||||
if err = writeTreeUpsertQueue(tree); err != nil {
|
||||
return
|
||||
}
|
||||
util.PushUpdateMsg(msgId, fmt.Sprintf(Conf.Language(120), files, humanize.BytesCustomCeil(uint64(size), 2)), 5000)
|
||||
|
||||
if 0 < forbiddenCount {
|
||||
util.PushErrMsg(fmt.Sprintf(Conf.Language(255), forbiddenCount), 5000)
|
||||
}
|
||||
} else {
|
||||
util.PushMsg(Conf.Language(121), 3000)
|
||||
if 0 < forbiddenCount {
|
||||
util.PushErrMsg(fmt.Sprintf(Conf.Language(255), forbiddenCount), 5000)
|
||||
} else {
|
||||
util.PushMsg(Conf.Language(121), 3000)
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
|
|
|
|||
|
|
@ -716,7 +716,7 @@ func ExportDocx(id, savePath string, removeAssets, merge bool) (fullPath string,
|
|||
content = strings.ReplaceAll(content, " \n", "<br>\n")
|
||||
|
||||
tmpDocxPath := filepath.Join(tmpDir, name+".docx")
|
||||
args := []string{ // pandoc -f html --resource-path=请从这里开始 请从这里开始\index.html -o test.docx
|
||||
args := []string{
|
||||
"-f", "html+tex_math_dollars",
|
||||
"--resource-path", tmpDir,
|
||||
"-o", tmpDocxPath,
|
||||
|
|
@ -796,17 +796,7 @@ func ExportMarkdownHTML(id, savePath string, docx, merge bool) (name, dom string
|
|||
}
|
||||
|
||||
if docx {
|
||||
ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
|
||||
if ast.NodeLinkDest == n.Type {
|
||||
if bytes.HasPrefix(n.Tokens, []byte("file://")) {
|
||||
n.Tokens = bytes.ReplaceAll(n.Tokens, []byte("\\"), []byte("/"))
|
||||
if !bytes.HasPrefix(n.Tokens, []byte("file:///")) {
|
||||
n.Tokens = bytes.ReplaceAll(n.Tokens, []byte("file://"), []byte("file:///"))
|
||||
}
|
||||
}
|
||||
}
|
||||
return ast.WalkContinue
|
||||
})
|
||||
netAssets2LocalAssets0(tree, true, "", filepath.Join(savePath, "assets"), false)
|
||||
}
|
||||
|
||||
assets := getAssetsLinkDests(tree.Root, docx)
|
||||
|
|
@ -814,7 +804,7 @@ func ExportMarkdownHTML(id, savePath string, docx, merge bool) (name, dom string
|
|||
if !util.IsAssetLinkDest([]byte(asset), docx) {
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
if strings.Contains(asset, "?") {
|
||||
asset = asset[:strings.LastIndex(asset, "?")]
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue