Как я могу программно создать документ ODT?

Я пытаюсь создать документ ODT с помощью Node.js, и я немного не понимаю, как я могу это сделать, и являются ли шаблоны подходящей альтернативой.

Документ, который я хочу создать, прост: оглавление, заголовки 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');

К сожалению, не так много библиотек LibreOffice/ODT, доступных для JS, и ни одна из них не может запросить создание оглавления.

Итак, моя вторая идея заключалась в том, чтобы, возможно, создать шаблон ODT и просто передать значения, чтобы заполнить значения, требуемые шаблоном. Но найти документацию о том, как это сделать, было сложно, особенно с учетом того, что веб-сайт LibreOffice сломан с точки зрения рендеринга и частично нечитаемо. Я не совсем понимаю, могут ли шаблоны обрабатывать произвольное количество значений или значений, которые вложены/парятся таким образом.


person GreenTriangle    schedule 02.07.2018    source источник
comment
В поисках того же - я заметил github.com/loveencounterflow/coffeelibre. Похоже, что Python более популярен из stackoverflow.com/questions/11638170/ и christopher5106.github.io/office/2015/12/06/ — и даже тогда не так хорошо документирован.   -  person Ben Creasy    schedule 29.11.2018


Ответы (1)


Что делать, если вы используете Pandoc? Вы можете легко создать файл Markdown, а затем преобразовать его в ODT с помощью Pandoc. В NPM есть даже оболочка pandocеще один).

В вашем примере вам просто нужно написать такой файл:

# It Begins

On the first day...

Things were looking good...

Blah blah blah...

# Second Chapter

Blah blah blah...

Pandoc даже позволяет использовать справочный документ (для изменения стилей по умолчанию) и шаблоны (для использования значений метаданных Markdown в качестве переменных в документе).

person José de Mattos Neto    schedule 09.05.2020