8 回答
OpenOffice.org可以在服务器模式下运行(即没有任何 GUI),可以读取 RTF 文件并可以输出 PDF 文件。
您有多种选择,具体取决于:
- 您的应用程序将在哪个平台上运行
- 您的应用程序将是服务器应用程序(例如,您设置一次然后运行的 Web 服务),还是广泛可用的桌面应用程序(例如,必须易于许多人下载和安装的应用程序)
- 您是否愿意投入很少或更多的编程工作来使解决方案发挥作用
- 您是否灵活地使用您将使用的编程语言
以下是一些选项:
- PDFCreator + COM
- 仅限 Windows
- 适用于桌面和服务器应用程序
- 中等编程工作量
- 任何可以让你说 COM 的语言
- OpenOffice(+ JODConverter - 可选)
- 跨平台(Windows、Linux 等)
- 适用于服务器应用程序,因为 OpenOffice 是 100MB+ 下载
- 低编程工作量
- Java(如果使用 JODConverter),或任何可以与OpenOffice 的 UNO交互的语言
- IText + Apache POI
- 跨平台(Windows、Linux 等)
- 适用于桌面和服务器应用程序
- 高编程工作量
- 爪哇
编辑
这是一篇较旧的帖子,与您的问题有一些共同点。
编辑 2
我从您的评论中看到您在 Linux 上并且对 C++ 或 Java 开放。 绝对使用选项2。
JODConverter
(Java):该库负责以无头模式生成并代表您与它OpenOffice
交谈。Uno
您提供JODConverter
输入和输出文件名以及输入和输出类型(例如 rtf 和 pdf),当它返回给您时,输出文件就准备好了。- C++:您可以在无头模式下 fork+exec 一个(或多个,用于负载平衡)OpenOffice 实例(soffice 将侦听套接字上的 UNO 请求,例如端口 8100。)在您的应用程序中使用Uno/CPP来指示 OpenOffice 执行转换同样的方式
JODConverter
(参见JODConverter
源代码以了解如何执行此操作。)
/opt/openoffice.org3/program/soffice.bin \
-accept=socket,host=127.0.0.1,port=8100;urp; \
-headless -nocrashreport -nodefault \
-nolockcheck -nologo -norestore
我成功地使用JODConverter
Java 应用程序将杂项文档类型(一些从模板动态生成的文档)转换为pdf
.
在这里聚会晚了四年,但我在我的 Web 应用程序中使用了Ted 。我以编程方式生成 RTF,然后使用rtf2pdf.sh
包中包含的脚本生成 PDF。我之前尝试过 OOo 和 unoconv,但 Ted 在我的应用程序中被证明更快、更可靠。
使用 PDFCreator,一款免费的 pdf 打印机。只需打印为pdf。您可以通过 COM 控制它。示例代码位于安装目录的 COM 文件夹中。
PDFCreator for windows是最简单的单个文档。
还可以通过将大量文档转换为 XML 并使用 XSLT 和 XSL-FO 来自动为大量文档创建 PDF。有很多关于这个的教程。
对于特定语言,例如 python,存在用于输出到 PDF 的库相当简单。
与其他更简单的解决方案相比,XML 的唯一优势是可扩展性。您还可以通过编程方式以 RTF、HTML、TXT 或几乎任何其他文本格式输出您的文档。
LibreOffice 可以通过命令行将 RTF 文档转换为 PDF。
以下是在 CentOS 上安装它的说明。
这是从 PHP 代码启动转换的示例:
<?php shell_exec('libreoffice4.2 --headless --invisible --norestore --convert-to pdf test.rtf'); ?>
普里莫PDF。它充当虚拟打印机,因此您只需打印到它,然后弹出一个 PDF。