This commit is contained in:
Liang Ding 2023-05-11 09:03:45 +08:00
parent a52cf1eb29
commit 847be4b939
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
5 changed files with 40 additions and 5 deletions

View file

@ -700,6 +700,17 @@ export const exportMd = (id: string) => {
openByMobile(response.data.zip);
});
}
}, {
label: "ODT",
click: () => {
const msgId = showMessage(window.siyuan.languages.exporting, -1);
fetchPost("/api/export/exportODT", {
id,
}, response => {
hideMessage(msgId);
openByMobile(response.data.zip);
});
}
},
]
}

View file

@ -31,6 +31,23 @@ import (
"github.com/siyuan-note/siyuan/kernel/util"
)
func exportODT(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)
arg, ok := util.JsonArg(c, ret)
if !ok {
return
}
id := arg["id"].(string)
name, zipPath := model.ExportPandocConvertZip(id, "odt", ".odt")
ret.Data = map[string]interface{}{
"name": name,
"zip": zipPath,
}
}
func exportMediaWiki(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)

View file

@ -251,6 +251,7 @@ func ServeAPI(ginServer *gin.Engine) {
ginServer.Handle("POST", "/api/export/exportOPML", model.CheckAuth, exportOPML)
ginServer.Handle("POST", "/api/export/exportOrgMode", model.CheckAuth, exportOrgMode)
ginServer.Handle("POST", "/api/export/exportMediaWiki", model.CheckAuth, exportMediaWiki)
ginServer.Handle("POST", "/api/export/exportODT", model.CheckAuth, exportODT)
ginServer.Handle("POST", "/api/import/importStdMd", model.CheckAuth, model.CheckReadonly, importStdMd)
ginServer.Handle("POST", "/api/import/importData", model.CheckAuth, model.CheckReadonly, importData)

View file

@ -2029,15 +2029,17 @@ func exportPandocConvertZip(boxID, baseFolderName string, docPaths []string,
}
// 调用 Pandoc 进行格式转换
output, err := util.Pandoc(pandocFrom, pandocTo, md)
output, err := util.Pandoc(pandocFrom, pandocTo, writePath, md)
if nil != err {
logging.LogErrorf("pandoc failed: %s", err)
continue
}
if err := gulu.File.WriteFileSafer(writePath, gulu.Str.ToBytes(output), 0644); nil != err {
logging.LogErrorf("write export markdown file [%s] failed: %s", writePath, err)
continue
if "odt" != pandocTo && "epub" != pandocTo && "rtf" != pandocTo {
if err := gulu.File.WriteFileSafer(writePath, gulu.Str.ToBytes(output), 0644); nil != err {
logging.LogErrorf("write export markdown file [%s] failed: %s", writePath, err)
continue
}
}
// 解析导出后的标准 Markdown汇总 assets

View file

@ -26,7 +26,7 @@ import (
"github.com/siyuan-note/logging"
)
func Pandoc(from, to, content string) (ret string, err error) {
func Pandoc(from, to, o, content string) (ret string, err error) {
if "" == from || "" == to || "md" == to {
ret = content
return
@ -37,6 +37,10 @@ func Pandoc(from, to, content string) (ret string, err error) {
"--to", to,
}
if "" != o {
args = append(args, "-o", o)
}
pandoc := exec.Command(PandocBinPath, args...)
gulu.CmdAttr(pandoc)
pandoc.Stdin = bytes.NewBufferString(content)