Как создать файл ODT программно с Java?

Как программно создать файл odt (LibreOffice/OpenOffice Writer) с Java? Пример "Привет, мир" будет достаточно. Я посмотрел на сайте OpenOffice, но документация не была ясна.

8 ответов

Взгляните на ODFDOM - API OpenDocument

ODFDOM - это бесплатная библиотека формата OpenDocument (ODF). Его цель - предоставить простой общий способ создания, доступа к файлам ODF и манипулирования ими, не требуя подробных знаний о спецификации ODF. Он предназначен для того, чтобы предоставить сообществу разработчиков ODF простой и легкий API для программирования, переносимый на любой объектно-ориентированный язык.

Текущая эталонная реализация написана на Java.

// Create a text document from a standard template (empty documents within the JAR)
OdfTextDocument odt = OdfTextDocument.newTextDocument();

// Append text to the end of the document. 
odt.addText("This is my very first ODF test");

// Save document
odt.save("MyFilename.odt");

потом

На момент написания статьи (2016-02) нам сказали, что эти классы устарели... большое время, и OdfTextDocument Документация по API говорит вам:

Начиная с версии 0.8.8, заменено на org.odftoolkit.simple.TextDocument в Simple API.

Это означает, что вы все еще включаете тот же активный файл.jar в свой проект, simple-odf-0.8.1-incubating-jar-with-dependencies.jar, но вы хотите распаковать следующий.jar для получения документации: simple-odf-0.8.1-incubating-javadoc.jar, скорее, чем odfdom-java-0.8.10-incubating-javadoc.jar,

Кстати, ссылка на документацию загружает кучу jar-файлов внутри.zip с надписью "0.6.1"... но большая часть содержимого внутри выглядит как 0.8.1. Я понятия не имею, почему они говорят "с 0.8.8" в документации для "устаревших" классов: почти все уже помечено как устаревшее.

Эквивалентный простой код вышеупомянутому тогда:

odt_doc = org.odftoolkit.simple.TextDocument.newTextDocument()
para = odt_doc.getParagraphByIndex( 0, False )
para.appendTextContent( 'stuff and nonsense' )
odt_doc.save( 'mySpankingNewFile.odt' )

PS Я использую Jython, но Java должна быть очевидной.

Я не пробовал это, но использование JOpenDocument может быть вариантом. (Кажется, это чистая библиотека Java для генерации файлов OpenDocument.)

Дополнением к ранее предоставленным решениям будет JODReports, который позволяет создавать офисные документы и отчеты в формате ODT (из шаблонов, составленных с использованием текстового процессора LibreOffice/OpenOffice.org Writer).

DocumentTemplateFactory templateFactory = new DocumentTemplateFactory();
DocumentTemplate template = templateFactory .getTemplate(new File("template.odt"));
Map data = new HashMap();
data.put("title", "Title of my doc");
data.put("picture", new RenderedImageSource(ImageIO.read(new File("/tmp/lena.png"))));
data.put("answer", "42");
//...
template.createDocument(data, new FileOutputStream("output.odt"));

При желании документы могут быть преобразованы в PDF, Word, RTF и т. Д. С помощью JODConverter.

Редактировать / обновление

Здесь вы можете найти пример проекта с использованием JODReports (с нетривиальными случаями форматирования).

Я написал jruby DSL для программного манипулирования документами ODF.

https://github.com/noah/ocelot

Это не строго Java, но его цель - использовать его намного проще, чем ODFDOM.

Создать документ hello world так же просто, как:

% cat examples/hello.rb
include OCELOT

Text::create "hello" do
  paragraph "Hello, world!"
end

Здесь есть еще несколько примеров (включая один или два примера из электронных таблиц).

Проект ODF Toolkit (код размещен на Github) — это новый дом бывшего проекта ODFDOM, который до 27 ноября 2018 года был проектом Apache Incubator .

Я искал ответ на этот вопрос для себя. Я работаю над проектом по созданию документов в разных форматах, и мне очень не хватало библиотеки для генерации ODT-файлов. Наконец, я могу сказать, что ODFToolkit с последней версией библиотеки simple-odf - это ответ для генерации текстовых документов. Вы можете найти официальную страницу здесь: Apache ODF Toolkit(Incubating) - Simple API. Вот страница для загрузки версии 0.8.1 (последняя версия Simple API), поскольку я не нашел последнюю версию на официальной странице, только версия 0.6.1

И здесь вы можете найти Apache ODF Toolkit(инкубационная) поваренная книга

Вы можете попробовать использовать JasperReports для генерации ваших отчетов, а затем экспортировать их в ODS. Хорошая вещь об этом подходе

  1. Вы получаете широкую поддержку всех выходных форматов JasperReports, например, PDF, XLS, HTML и т. д.
  2. Jasper Studio позволяет легко создавать отчеты

Решением может быть компания JODF Java API Independencentsoft. Например, если мы хотим создать файл Open Document с помощью этого Java API, мы могли бы сделать следующее:

import com.independentsoft.office.odf.Paragraph;
import com.independentsoft.office.odf.TextDocument;

public class Example {

    public static void main(String[] args)
    {
        try
        {
            TextDocument doc = new TextDocument();

            Paragraph p1 = new Paragraph();
            p1.add("Hello World");

            doc.getBody().add(p1);

            doc.save("c:\\test\\output.odt", true);
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}

Для этого API также существуют решения.NET.

Другие вопросы по тегам