【问题标题】:Java library to convert RTF files to PDF.用于将 RTF 文件转换为 PDF 的 Java 库。
【发布时间】:2013-01-21 04:52:56
【问题描述】:

我有一个 java 桌面服务。它目前使用速度模板来创建格式化的 RTF 文件。有很多这样的模板,更改它们(或从速度移动)不是一种选择。

我正在寻找一种使用 java 代码将 RTF 文件更改为 PDF 的快速简便的方法。我已经检查了以下途径。 1.iText 2. 开放式办公室 3. Jod转换器

但是,他们都是 PDF 创建者。我需要一些可以将 RTF 转换为 PDF 的东西。请帮忙。谢谢。

【问题讨论】:

  • 最后,必须生成一个PDF。 “转换”是什么意思?
  • 我的意思是说我不想从现有系统内部的业务逻辑“生成”PDF。我想将 RTF“转换”为 PDF,并带有一些可以附加到我已经启动和运行的代码的代码。如果您的问题是最终必须“创建”PDF,是的,我同意,这是正确的理解。希望 - 除了迂腐的一点 - 我已经能够传达要求。
  • 我不知道 itext 是否仍然支持 RTF 到 PDF,但本质上,velocity 会给你一个 RTF 文档的编写器,你需要一个类似于以下的代码来生成(又名转换)PDF: cfsearching.blogspot.com.au/2009/04/…
  • Open Office 和 Libre Office(更好)肯定会将 RTF 转换为 PDF。它们不是您所描述的 PDF 生成器。转换是否合适/足够好需要针对您的文档进行测试。您可以使用 Libre Office 和命令行(例如 soffice --convert-to pdf myDocument.rtf)测试仅转换过程

标签: java


【解决方案1】:

我已经在谷歌上搜索了很长时间的同一个问题,这是我的解决方案: 使用documents4j 和microsoft office 2010(未尝试较新版本)(不需要在后台运行)。 此解决方案将 .rtf 转换为 .pdf

POM 文件:

<dependencies>
    <dependency>
        <groupId>com.documents4j</groupId>
        <artifactId>documents4j-api</artifactId>
        <version>0.2.1</version>
    </dependency>       

    <dependency>
        <groupId>com.documents4j</groupId>
        <artifactId>documents4j-util-conversion</artifactId>
        <version>0.2.1</version>
    </dependency>

    <dependency>
        <groupId>com.documents4j</groupId>
        <artifactId>documents4j-transformer</artifactId>
        <version>0.2.1</version>
    </dependency>

    <dependency>
        <groupId>com.documents4j</groupId>
        <artifactId>documents4j-util-all</artifactId>
        <version>0.2.1</version>
    </dependency>

    <dependency>
        <groupId>com.documents4j</groupId>
        <artifactId>documents4j-local</artifactId>
        <version>0.2.1</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.8.0-beta2</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.8.0-beta2</version>
    </dependency>
    <dependency>
        <groupId>com.documents4j</groupId>
        <artifactId>documents4j-util-standalone</artifactId>
        <version>1.0.3</version>
    </dependency>
    <dependency>
        <groupId>com.documents4j</groupId>
        <artifactId>documents4j-transformer-msoffice-word</artifactId>
        <version>1.0.3</version>
    </dependency>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>23.0</version>
    </dependency>
</dependencies>

包括所有这些!在 .rtf 文件中,您需要其中一些用于字体和类似的东西。 java中的使用示例:

import com.documents4j.api.DocumentType;
import com.documents4j.api.IConverter;
import com.documents4j.job.LocalConverter;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;

/**
 *
 * @author Neon/Jan Madle
 */
public class NewMain {

/**
 * @param args the command line arguments
 * @throws java.io.FileNotFoundException
 */
public static void main(String[] args) throws FileNotFoundException,             IOException, InterruptedException, ExecutionException {

    ByteArrayOutputStream bo = new ByteArrayOutputStream();

    InputStream in = new BufferedInputStream(new FileInputStream(System.getProperty("user.dir") + File.separator +"out.rtf"));
    IConverter converter = LocalConverter.builder()
            .baseFolder(new File(System.getProperty("user.dir") + File.separator +"test"))
            .workerPool(20, 25, 2, TimeUnit.SECONDS)
            .processTimeout(5, TimeUnit.SECONDS)
            .build();

    Future<Boolean> conversion = converter
            .convert(in).as(DocumentType.RTF)
            .to(bo).as(DocumentType.PDF)
            .prioritizeWith(1000) // optional
            .schedule();
    conversion.get();
    try (OutputStream outputStream = new FileOutputStream("out.pdf")) {
        bo.writeTo(outputStream);
    }
    in.close();
    bo.close();
}
}

希望有人觉得这很有用!

【讨论】:

    【解决方案2】:

    JODConverter 帮助您使用 Java 将 RTF 文件转换为 PDF。最新版本可以在here找到。

    根据他们的网站,

    JODConverter,Java OpenDocument 转换器,可在不同办公格式之间转换文档。 它利用了 OpenOffice.org,它为当今可用的 OpenDocument 和 Microsoft Office 格式提供了可以说是最好的导入/导出过滤器。

    【讨论】:

      猜你喜欢
      • 2010-12-23
      • 1970-01-01
      • 2014-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      相关资源
      最近更新 更多