25

如何以编程方式使用 Java 创建 odt (LibreOffice/OpenOffice Writer) 文件?一个“hello world”的例子就足够了。我查看了 OpenOffice 网站,但文档并不清楚。

4

7 回答 7

13

看看ODFDOM - OpenDocument API

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),我们被告知这些类已被弃用......很重要,OdfTextDocumentAPI 文档告诉您:

从 0.8.8 版开始,由 Simple API 中的 org.odftoolkit.simple.TextDocument 取代。

这意味着您仍然在项目中包含相同的活动 .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.

顺便说一句,文档链接在 .zip 中下载了一堆 jar 文件,上面写着“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应该很明显。

于 2011-01-25T08:46:03.767 回答
8

我没有尝试过,但使用JOpenDocument可能是一种选择。(它似乎是一个用于生成 OpenDocument 文件的纯 Java 库。)

于 2011-01-25T08:46:19.133 回答
3

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"));

然后可以选择使用JODConverter将文档转换为 PDF、Word、RTF 等。

编辑/更新

在这里,您可以找到使用 JODReports 的示例项目(带有非平凡的格式案例)。

于 2012-12-04T09:22:38.407 回答
2

我编写了一个 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

这里还有更多示例(包括一个或两个电子表格示例)。

于 2013-06-21T18:02:36.427 回答
1

我一直在为自己寻找关于这个问题的答案。我正在开发一个用于生成具有不同格式的文档的项目,并且我非常需要库来生成 ODT 文件。我终于可以说带有最新版 simple-odf 库的 ODFToolkit 是生成文本文档的答案。你可以在这里找到官方页面: Apache ODF Toolkit(Incubating) - Simple API 这是 一个下载版本 0.8.1(Simple API的最新版本)的页面,因为我在官方页面上没有找到最新版本,仅版本 0.6.1

在这里你可以找到Apache ODF Toolkit (incubating) 食谱

于 2015-09-11T12:09:09.797 回答
0

您可以尝试使用JasperReports生成报告,然后将其导出到 ODS。这种方法的好处是

  1. 您将获得对所有 JasperReports 输出格式的广泛支持,例如 PDF、XLS、HTML 等。
  2. Jasper Studio让您轻松设计报告
于 2013-10-01T08:36:57.507 回答
-1

解决方案可能是 JODF Java API Independentsoft 公司。例如,如果我们想使用这个 Java API 创建一个 Open Document 文件,我们可以执行以下操作:

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 解决方案。

于 2019-09-10T10:02:00.760 回答