簡體   English   中英

使用Java將EPUB轉換為PDF

[英]Converting EPUB to PDF with Java

我想使用Java將EPUB文檔轉換為PDF。 我發現了很多關於將PDF轉換為EPUB的問題,但沒有其他任何問題。

是否有一個Java庫或一個命令行工具,我可以通過Java調用它可以做到這一點?

Thx提前!

-Gesh

如果您不擔心使用在線服務,則可以使用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);
    }
}

你可以從命令行調用Calibre的程序ebook-convert 有關詳細信息,請參閱Calibre手冊

我相信轉換可以很好地滿足簡單的要求。 我試圖將它用於電子書轉換(ePUB到PDF),但無法控制某些文檔參數(頁碼縮進等)。 結果包含來自源ePUB的所有文本,它可以使用,但我對格式化的質量不滿意。

最后,我最終解析了ePUB並使用PrinceXML進行HTML到PDF的轉換。 關於這一點的好處是我可以刪除ePUB目錄(沒有頁碼的超鏈接)與完全不同的ToC(帶頁碼的超鏈接),我可以在適當的地方添加空頁等.PrinceXML是二進制文件,你可以從命令行運行或者你可以通過Java包裝器執行它,它工作得非常好,並且廣泛支持HTML / CSS。

卡雷爾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM