如何以编程方式创建ODT文档?

时间:2018-07-02 21:17:33

标签: node.js libreoffice 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网站broken in terms of rendering and partly unreadable中。我尚不清楚模板是否可以处理传递任意数量的值或以这种方式嵌套/配对的值。

1 个答案:

答案 0 :(得分:0)

如果使用Pandoc,该怎么办?您可以轻松构建Markdown文件,然后使用Pandoc将其转换为ODT。 NPM中甚至还有pandoc wrapper(还有another one)。

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

# It Begins

On the first day...

Things were looking good...

Blah blah blah...

# Second Chapter

Blah blah blah...

Pandoc甚至允许使用reference document(用于更改默认样式)和templates(用于将Markdown元数据值用作文档中的变量)。