我不知道如何为 MuPDF 执行此操作,但您可以将 Android 上的多个 PDF 文件与最新的Apache PdfBox Release结合起来。(目前还没有最终确定……RC3……)
只需将此依赖项添加到您的 build.gradle 中:
compile 'org.apache.pdfbox:pdfbox:2.0.0-RC3'
在异步任务中执行以下操作:
private File downloadAndCombinePDFs(String urlToPdf1, String urlToPdf2, String urlToPdf3 ) throws IOException {
PDFMergerUtility ut = new PDFMergerUtility();
ut.addSource(NetworkUtils.downloadFile(urlToPdf1, 20));
ut.addSource(NetworkUtils.downloadFile(urlToPdf2, 20));
ut.addSource(NetworkUtils.downloadFile(urlToPdf3, 20));
final File file = new File(getContext().getExternalCacheDir(), System.currentTimeMillis() + ".pdf");
final FileOutputStream fileOutputStream = new FileOutputStream(file);
try {
ut.setDestinationStream(fileOutputStream);
ut.mergeDocuments(MemoryUsageSetting.setupTempFileOnly());
} finally {
fileOutputStream.close();
}
return file;
}
这里 NetworkUtils.downloadFile() 应该返回一个 InputStream。如果你的 SD 卡上有它们,你可以打开一个 FileInputStream。
我像这样从互联网上下载PDF:
public static InputStream downloadFileThrowing(String url, int timeOutInSeconds) throws IOException {
OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(timeOutInSeconds, TimeUnit.SECONDS);
client.setReadTimeout(timeOutInSeconds, TimeUnit.SECONDS);
Request request = new Request.Builder().url(url).build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful())
throw new IOException("Download not successful.response:" + response);
else
return response.body().byteStream();
}
要使用 OkHttpClient,请将其添加到您的 build.gradle:
compile 'com.squareup.okhttp:okhttp:2.7.2'
注意:
这不适用于加密文件。要合并加密文件,您应该首先解密所有单个文件,然后再加密合并的 pdf。