我如何结合多个pdf来转换Android中的单个pdf?

时间:2014-11-04 14:04:50

标签: android pdf merge

我的SD卡中有单页PDF文件。现在我需要以编程方式将这些单页PDF文件合并到一个PDF文档中。我使用Android PDF Writer库来创建那些单个PDF文件。我怎么能这样做?我尝试了一些代码和问题,但我找不到任何好的答案。 有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

我不知道如何为APW(Android PDF Writer)执行此操作,但您可以将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'