使用Java将EPUB转换为PDF

问题描述 投票:3回答:2

我想使用Java将EPUB文档转换为PDF。我发现了很多关于将PDF转换为EPUB的问题,但没有其他任何问题。

是否有一个Java库或一个命令行工具,我可以通过Java调用它可以做到这一点?

Thx提前!

-GEN

java pdf epub
2个回答
1
投票

如果您不害怕使用在线服务,那么可以使用EPUB to PDF Rest API

实际的JAVA代码看起来像

public class Main {
    public static void main(String[] args) throws IOException {
        TreeMap params = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);

        params.put("File", "C:\path\to\test-epub.epub");
        params.put("Secret", "<secret>");

        CloseableHttpResponse response = ConvertApi.convert("epub", "pdf", params);
        System.out.println(EntityUtils.toString(response.getEntity(), "UTF-8"));
    }
}

class ConvertApi {
    public static CloseableHttpResponse convert(String srcFormat, String dstFormat, TreeMap params) throws IOException {
        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        params.forEach((k, v) -> {
            if(Files.exists(Paths.get(v))) {
                builder.addBinaryBody(k, new File(v));
            } else {
                builder.addTextBody(k, v, ContentType.TEXT_PLAIN);
            }
        });

        String authParam = params.get("secret") == null ? String.format("Token=%s", params.get("token")) : String.format("Secret=%s", params.get("secret"));
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(String.format("https://v2.convertapi.com/%s/to/%s?%s", srcFormat, dstFormat, authParam));
        httpPost.setEntity(builder.build());
        return httpClient.execute(httpPost);
    }
}

0
投票

您可以从命令行调用Calibre的名为ebook-convert的程序。有关更多信息,请参阅Calibre manual

我相信转换可以很好地满足简单的要求。我试图将它用于电子书转换(ePUB到PDF),但无法控制某些文档参数(页码缩进等)。结果包含来自源ePUB的所有文本,它可以使用,但我对格式化的质量不满意。

最后,我最终解析了ePUB并使用PrinceXML进行HTML到PDF的转换。关于这一点的好处是我可以删除ePUB目录(没有页码的超链接)与完全不同的ToC(带页码的超链接),我可以在适当的地方添加空页等.PrinceXML是二进制文件,你可以从命令行运行或者你可以通过Java wrapper执行它,它运行得很好,并且广泛支持HTML / CSS。

卡雷尔

© www.soinside.com 2019 - 2024. All rights reserved.