【插件】导出内容为DOC格式

Innis 4月前 422

效果演示:

 

代码:

安装方式请参考:https://club.roamedit.com/club/?thread-1976.htm

/**
 * @title 导出为doc
 * @author Innis
 * @note 将当前页面导出为doc格式。
 */
// import "./print"
pluginManager.register('docExport', {
    after_docmenu_run() {
        plugin.menu.group.doc.sub.exportAs.sub.doc = {
            label: "DOC",
            icon: "caret-right",
            action() {
                const ky = this.nv.ky;
                const bullets = plugin.memory.get(ky, true);

                let htmlPrintContent = plugin.docExport.html(bullets)
                let pageTopic = bullets.text

                htmlPrintContent = `<div id="printContent">${htmlPrintContent}</div>`;
                htmlPrintContent = htmlPrintContent.replace("</li></ul></div>", "</div>").replace(`<ul><li>${pageTopic}`, "");

                let regex1 = /<span ps='.'>(\S|\s)+?<\/span>/g;
                let subst1 = ``;
                let regex2 = /<span(\S|\s)+?>/g;
                let subst2 = ``;
                let regex3 = /<s ps='.'>(\S|\s)+?<\/s>/g;
                let subst3 = ``;

                htmlPrintContent = htmlPrintContent.replace(regex1, subst1)
                    .replace(regex2, subst2)
                    .replace(regex3, subst3);

                htmlPrintContent = htmlPrintContent.replace("color='red'", "style='color: #d9534f'")
                    .replace("color='green'", "style='color:#5cb85c'")
                    .replace("color='blue'", "style='color:#337ab7'")
                    .replace("color='yellow'", "style='color:#f2b968'")
                    .replace("<highlight", "<span style='background:#fbe9cf;")
                    .replace("</highlight>", "</span>")

                htmlPrintContent = htmlPrintContent.replaceAll('data/user-data', 'https://roamedit.com/edit/data/user-data')

                function getModelHtml(mhtml) {
                    return `
                        <html>
                        <head>
                        <meta http-equiv=Content-Type content="text/html; charset=utf-8">
                        </head>
                        </head>
                        <body>
                        <h1>${pageTopic}</h1>
                        ${mhtml}
                        </body>
                        </html>
                        `
                }

                var html = getModelHtml(htmlPrintContent)
                var blob = new Blob([html], { type: "application/msword;charset=UTF-8" });
                saveAs(blob, `${pageTopic}.doc`);

            }
        }
    },
    html(node) {
        let wrapTag = 'ul'
        function item2li(itemJson) {
            if (isEmpty(itemJson)) {
                return '';
            }
            let html = '';
            if (!isEmpty(itemJson.child)) {
                html += list2ul(itemJson.child);
            }
            return `<li>${itemJson.text || itemJson.ori}${html}</li>`;
        }
        function list2ul(listJson) {
            let html = '';
            for (const item of listJson) {
                html += item2li(item);
            }
            return `<ul>${html}</ul>`;
        }
        let html = item2li(node);
        if (!isEmpty(wrapTag)) {
            html = `<${wrapTag}>${html}</${wrapTag}>`;
        }
        return html;
    },

    run() {
        loadScript("https://cdn.bootcdn.net/ajax/libs/FileSaver.js/2.0.4/FileSaver.js")
    }
});
快速回复
最新回复 (4)
  • gm 4月前
    0 2
    感谢!但能去掉项目符号么?
  • Innis 4月前
    0 3
    gm 感谢!但能去掉项目符号么?
    导出的原则是不破坏现有的大纲格式和层级,所以默认是有项目符号的,如果不需要,可以在word里处理一下,全选之后点几下项目符号按钮就可以了。
  • 方椰 3月前
    0 4

    感谢!插件很好,但是导出为word之后,我开始以为文档中的图片被切割了,有近一半是看不到的,现在发现可以通过图片手动缩小,看到完整的,希望可以解决这个问题

  • Innis 3月前
    0 5
    方椰 感谢!插件很好,但是导出为word之后,我开始以为文档中的图片被切割了,有近一半是看不到的,现在发现可以通过图片手动缩小,看到完整的,希望可以解决这个问题
    感谢反馈,已修复
返回
Innis
管理员
200
主题数
126
帖子数
精华数
14