首页 > 解决方案 > 如何以编程方式创建 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 网站在渲染方面出现问题并且部分不可读的情况下。我不太清楚模板是否可以处理传递任意数量的值或以这种方式嵌套/配对的值。

标签: node.jslibreofficeodt

解决方案


如果你使用Pandoc怎么办?您可以轻松构建 Markdown 文件,然后使用 Pandoc 将其转换为 ODT。NPM 中甚至还有一个pandoc 包装器(和另一个)。

在您的示例中,您只需要编写如下文件:

# It Begins

On the first day...

Things were looking good...

Blah blah blah...

# Second Chapter

Blah blah blah...

Pandoc 甚至允许使用参考文档(用于更改默认样式)和模板(用于使用 Markdown 元数据值作为文档中的变量)。


推荐阅读