我想使用Java將EPUB文檔轉換爲PDF。 我發現很多關於將PDF轉換爲EPUB的問題,但沒有其他辦法。使用Java將EPUB轉換爲PDF
是否有一個Java庫或一個命令行工具,我可以通過Java調用會做魔術?
Thx提前!
-Gesh
我想使用Java將EPUB文檔轉換爲PDF。 我發現很多關於將PDF轉換爲EPUB的問題,但沒有其他辦法。使用Java將EPUB轉換爲PDF
是否有一個Java庫或一個命令行工具,我可以通過Java調用會做魔術?
Thx提前!
-Gesh
您可以撥打口徑的程序的命令行稱爲ebook-convert。請參閱Calibre manual瞭解更多信息。
我相信對於簡單的需求,轉換工作正常。我試圖用它來進行電子書轉換(ePUB to PDF),但無法控制一些文檔參數(頁碼縮進等)。結果包含源ePUB的所有文本,它可用,但我對格式化的質量不滿意。
最後,我最終解析了ePUB並使用PrinceXML進行了HTML轉換。關於這一點的好處是我可以用一個完全不同的ToC(帶頁碼的超鏈接)去除ePUB目錄表(超鏈接不帶頁碼),我可以在適當的地方添加空白頁面。PrinceXML是一個二進制文件,你可以從命令行運行,或者你可以通過Java wrapper執行它,它工作得很好,並且有廣泛的HTML/CSS支持。
卡雷爾
如果你不害怕使用在線服務的話,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);
}
}
因爲EPUB基本上是包裝HTML,你可能想嘗試的問題分爲兩個部分: 1.解壓使用現有的庫 2.將HTML轉換成pdf – Photon 2014-11-04 12:19:00
這聽起來像個好主意。與包裝相比,除了包裝之外,哪些差異與epub相比可能導致轉換問題? – Gesh 2014-11-04 12:22:10
還有一組提供元數據的標準xml文件。如果你只是想要的文字,你可以忽略它的大部分。 – Photon 2014-11-04 16:53:56