我希望利用Java将EPUB文档转换为PDF。我找到了很多关于将PDF转换为EPUB的问题,但没有关于反向转换的内容。
是否有一个Java库或命令行工具,可以通过Java调用来完成这个魔术般的转换呢?
提前感谢!
-Gesh
是否有一个Java库或命令行工具,可以通过Java调用来完成这个魔术般的转换呢?
提前感谢!
-Gesh
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目录(没有页码的超链接)并使用完全不同的目录(带有页码的超链接),我可以在适当的位置添加空白页等。PrinceXML是一个二进制文件,您可以从命令行运行它,也可以通过Java wrapper执行它,它非常好用,并且具有广泛的HTML/CSS支持。
Karel