diff --git a/kernel/model/export_merge.go b/kernel/model/export_merge.go index f451f609a..c8b1e503a 100644 --- a/kernel/model/export_merge.go +++ b/kernel/model/export_merge.go @@ -20,6 +20,7 @@ import ( "github.com/88250/lute/ast" "github.com/88250/lute/parse" "github.com/siyuan-note/siyuan/kernel/filesys" + "github.com/siyuan-note/siyuan/kernel/treenode" ) func mergeSubDocs(rootTree *parse.Tree) (ret *parse.Tree, err error) { @@ -30,9 +31,6 @@ func mergeSubDocs(rootTree *parse.Tree) (ret *parse.Tree, err error) { } insertPoint := rootTree.Root.LastChild - if nil == insertPoint { - insertPoint = rootTree.Root - } // 跳过空段落插入点,向上寻找非空段落 for ; nil != insertPoint && ast.NodeParagraph == insertPoint.Type; insertPoint = insertPoint.Previous { @@ -41,6 +39,17 @@ func mergeSubDocs(rootTree *parse.Tree) (ret *parse.Tree, err error) { } } + // 导出空文档 Word 和 PDF 时合并子文档失败 https://github.com/siyuan-note/siyuan/issues/7429 + if nil == insertPoint { + // 如果找不到非空段落,则使用第一个段落作为插入点 + insertPoint = rootTree.Root.FirstChild + if nil == insertPoint { + // 如果文档为空,则创建一个空段落作为插入点 + insertPoint = treenode.NewParagraph() + rootTree.Root.AppendChild(insertPoint) + } + } + for { i := 0 if err = walkBlock(insertPoint, rootBlock, i); nil != err { diff --git a/kernel/model/flashcard.go b/kernel/model/flashcard.go index 3d118b860..bf6e1214a 100644 --- a/kernel/model/flashcard.go +++ b/kernel/model/flashcard.go @@ -249,7 +249,7 @@ func getTreeSubTreeChildBlocks(rootID string) (treeBlockIDs map[string]bool) { for _, t := range trees { ast.Walk(t.Root, func(n *ast.Node, entering bool) ast.WalkStatus { - if !entering || !n.IsBlock() || ast.NodeDocument == n.Type { + if !entering || !n.IsBlock() { return ast.WalkContinue }