【问题标题】:How can I programmatically create an ODT document?如何以编程方式创建 ODT 文档?
【发布时间】:2018-12-11 03:12:26
【问题描述】:

我正在尝试使用 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。我不太清楚模板是否可以处理传递任意数量的值或以这种方式嵌套/配对的值。

【问题讨论】:

标签: node.js libreoffice odt


【解决方案1】:

如果您使用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 元数据值用作文档中的变量)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2012-02-15
    • 2012-07-30
    相关资源
    最近更新 更多