将RTF文件转换为PDF的Java库。

5
我有一个Java桌面服务。目前它使用速度模板创建格式化的RTF文件。有相当多的这些模板,更改它们(或从速度中移动)不是一个选择。
我正在寻找一种快速简便的方法来通过Java代码将RTF文件转换为PDF。我已经查看了以下途径:
1. iText 2. OpenOffice 3. JodConverter 但是,所有这些都是PDF创建器。我需要的是能够将RTF转换为PDF的东西。请帮忙。谢谢。

1
最终需要生成一个PDF。你所说的“转换”是什么意思? - Usman Saleem
我的意思是,我不想从现有系统内部的业务逻辑中“生成”PDF。我想要用一些代码将RTF转换为PDF,并将其附加到我正在运行的任何内容中。如果您的问题是关于最终必须“创建”PDF的事实,那么我同意,这是正确的理解。希望 - 抛开吹毛求疵的部分 - 我已经能够传达需求了。 - partha
我不知道itext是否仍支持RTF转PDF,但基本上velocity会为您提供一个用于RTF文档的writer,并且您需要类似以下代码来生成(即转换)PDF:http://cfsearching.blogspot.com.au/2009/04/itext-preview-of-things-to-come-someday.html - Usman Saleem
可能是 https://dev59.com/E1DTa4cB1Zd3GeqPGRpQ 的重复问题。 - kristianp
Open Office和Libre Office(更好)一定可以将RTF转换为PDF。它们不是你所描述的PDF生成器。转换是否足够适合/好需要根据您的文档进行测试。您可以使用Libre Office和命令行(例如soffice --convert-to pdf myDocument.rtf)测试仅转换过程。 - Paul Jowett
2个回答

5

我已经在谷歌上搜索了很长时间相同的问题,这是我的解决方案: 使用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();
}
}

希望有人会发现这个有用!


0

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

根据他们的网站,

JODConverter,即 Java OpenDocument Converter,可在不同的办公格式之间进行文档转换。 它利用 OpenOffice.org,该软件提供了目前可用的 OpenDocument 和 Microsoft Office 格式的最佳导入/导出过滤器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接