diff --git a/app/src/util/onGetConfig.ts b/app/src/util/onGetConfig.ts index e82b5c4bb..60c9d437f 100644 --- a/app/src/util/onGetConfig.ts +++ b/app/src/util/onGetConfig.ts @@ -391,6 +391,7 @@ const initWindow = () => { destroyPrintWindow(); fetchPost("/api/export/addPDFOutline", { id: ipcData.rootId, + merge: ipcData.mergeSubdocs, path: pdfFilePath }, () => { afterExport(pdfFilePath, msgId); diff --git a/kernel/api/export.go b/kernel/api/export.go index a5d0c7820..58cc11b50 100644 --- a/kernel/api/export.go +++ b/kernel/api/export.go @@ -290,7 +290,11 @@ func addPDFOutline(c *gin.Context) { id := arg["id"].(string) path := arg["path"].(string) - err := model.AddPDFOutline(id, path) + merge := false + if nil != arg["merge"] { + merge = arg["merge"].(bool) + } + err := model.AddPDFOutline(id, path, merge) if nil != err { ret.Code = -1 ret.Msg = err.Error() diff --git a/kernel/model/export.go b/kernel/model/export.go index debfedbcc..a3136cbd1 100644 --- a/kernel/model/export.go +++ b/kernel/model/export.go @@ -489,7 +489,7 @@ func processIFrame(tree *parse.Tree) { } } -func AddPDFOutline(id, p string) (err error) { +func AddPDFOutline(id, p string, merge bool) (err error) { inFile := p links, err := api.ListToCLinks(inFile) if nil != err { @@ -527,6 +527,14 @@ func AddPDFOutline(id, p string) (err error) { if nil == tree { return } + if merge { + var mergeErr error + tree, mergeErr = mergeSubDocs(tree) + if nil != mergeErr { + logging.LogErrorf("merge sub docs failed: %s", mergeErr) + return + } + } var headings []*ast.Node ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus { diff --git a/kernel/model/export_merge.go b/kernel/model/export_merge.go index 00ca2f024..e95961e91 100644 --- a/kernel/model/export_merge.go +++ b/kernel/model/export_merge.go @@ -84,7 +84,7 @@ func loadTreeNodes(box string, p string, level int) (ret []*ast.Node, err error) hLevel = 6 } - heading := &ast.Node{Type: ast.NodeHeading, HeadingLevel: hLevel} + heading := &ast.Node{ID: tree.Root.ID, Type: ast.NodeHeading, HeadingLevel: hLevel} heading.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(tree.Root.IALAttr("title"))}) tree.Root.PrependChild(heading) for c := tree.Root.FirstChild; nil != c; c = c.Next {