我有很多单页的pdf文件,我想将它与Android设备上的mupdf库合并为一个pdf文件。这可能吗?
如果不可能,你能推荐一些我可以在android上使用的东西吗?
注意:所有pdf文件都已加密,生成的pdf文件也必须加密。
答案 0 :(得分:2)
虽然观众所基于的MuPDF库具有这样的功能,但查看器应用程序目前无法组合PDF文件。
我不知道有任何工具可以将PDF文件合并到Android上运行,但我很容易出错。
关于加密,您将不得不解密所有输入文件,并将最终文件加密为单独的操作。因此,除了允许您指定多个输入文件的UI,它们的组合顺序(实际上,可能是每个页面的使用顺序),您还需要能够指定解密密码和最终加密方法。相当复杂的UI。
答案 1 :(得分:1)
我不知道如何为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。