node.js - 如何以编程方式创建 ODT 文档?
问题描述
我正在尝试使用 Node.js 生成 ODT 文档,但对于我如何做,或者模板是否是合适的替代方案,我有点迷茫。
我要创建的文档很简单:目录、标题 1 和每个标题后面的段落。
我的书简单地用以下程序表示:
const chapters = [
{
title: "It Begins", paragraphs: [
"On the first day...",
"Things were looking good...",
"Blah blah blah..."
]
},
{
title: "Second Chapter", paragraphs: [
"Blah blah blah..."
]
}
];
理想情况下,我只是有类似的东西
const doc = new ODTFile();
chapters.forEach(chapter => {
doc.insert('Heading 1', chapter.title);
chapter.paragraphs.forEach(para => doc.insert('paragraph', para));
});
doc.generateTableOfContents();
doc.writeFile('foo.odt');
不幸的是,可供 JS 使用的 LibreOffice/ODT 库的方式似乎并不多,而且没有一个可以请求生成目录。
所以我的第二个想法可能是创建一个 ODT 模板,然后传入值来填充模板所需的值。但是查找有关如何执行此操作的文档一直很棘手,尤其是在 LibreOffice 网站在渲染方面出现问题并且部分不可读的情况下。我不太清楚模板是否可以处理传递任意数量的值或以这种方式嵌套/配对的值。
解决方案
如果你使用Pandoc怎么办?您可以轻松构建 Markdown 文件,然后使用 Pandoc 将其转换为 ODT。NPM 中甚至还有一个pandoc 包装器(和另一个)。
在您的示例中,您只需要编写如下文件:
# It Begins
On the first day...
Things were looking good...
Blah blah blah...
# Second Chapter
Blah blah blah...
推荐阅读
- wordpress - Tor 不接收 CSS 和 JS 等(仅限本地)
- npm - CSS 更新后 NPM 模块无法导入
- python - PyQt5 - QTableView - HorizontalHeader - 右键单击信号以调用过滤器选择组合框
- c# - 如何通过 Google 驱动器 Api 的下载链接在 Google 驱动器中上传文件
- python - Lambda 无法将 CSV 导入 RDS SQL Server
- magento - magento 2.4 | Cookie“test”很快就会被拒绝,因为它的“SameSite”属性设置为“None”
- c# - 为什么我在我的 c# 脚本中得到 System.NullReferenceException 而我的相同代码的可执行文件正在工作?
- arrays - React How to pass field date from datepicker as Api url parameter
- ocaml - 如何修复 OCaml 中的语法错误 - 可能与“in”关键字有关?
- vue.js - Vuex 模块未按预期注册