我尝试使用简单的 EditorKit 选项,但这似乎并不支持所有 RTF 格式。所以我转而使用 Tika、JODConverter 或 POI。
截至目前,我设法通过使用它使其与 JODConverter 和 openOffice 一起使用
OfficeManager officeManager = new DefaultOfficeManagerConfiguration()
.setPortNumbers(8100, 8101).buildOfficeManager();
officeManager.start();
OfficeDocumentConverter converter - new
OfficeDocumentConverter(officeManger);
try{
File tempFile = File.createTempFile("tempRtf", ".rtf");
BufferedWriter bw = new BufferedWriter(new FileWriter(tempFile));
bw.write(rtfString);
bw.close;
File outputTempFile = File.createTempFile("otuputTepFile", ".html");
converter.convert(tempFile, outputTempFile);
return FileUtils.readFileToString(outputTempFile);
这行得通。
我的问题是我实际上设置了一个服务器并关闭它,这需要很多时间。我试图查看是否可以在第一次运行\报告时启动该进程(我将其用作 birt 报告中的处理程序)然后只是检查该进程是否正在运行,如果是,则使用它进行转换,仅此而已,它会节省很多时间,我看到浪费在启动和关闭过程上(我不在乎它会一直运行)我的问题是,我的 JODConverter 版本中似乎不存在此处提到的这些类。经过进一步调查,我发现它们在 JODConverter 2.2 API 上,我使用的是 3.0 core-beta-4。
JODConverter 对于我的简单需求似乎有点复杂。
因此,如果有人知道如何启动办公室经理一次,然后检查它是否启动,我会喜欢代码示例,当然,如果有人得到比 JODConverter 更好的解决方案来满足我的需要,我会很高兴听到它。
编辑:我需要我的 Handler 做两件事,1. 检查是否有一个 officemanager 实例启动,并连接到它(我们跳过 officeManager.start())和 2. 如果实例没有启动,那么就生病了基本上按照我写的代码示例发送。此代码是在 BIRT 处理程序中编写的,因此我无法全局创建 officeManager 并仅共享它,因为每次调用 birt 引擎时处理程序类都会运行。也许我可以在 Birt 本身中设置 officeManager?那么在处理程序中有实例吗?