3

私は多くの 1 ページの pdf ファイルを持っており、Android デバイスの mupdf ライブラリを使用して 1 つの pdf ファイルにマージしたいと考えています。これは可能ですか?

それが不可能な場合は、Android で使用できる他のものをお勧めできますか?

注: すべての pdf ファイルは暗号化されており、結果の pdf ファイルも暗号化する必要があります。

4

2 に答える 2

2

ビューアのベースとなっている MuPDF ライブラリはこのような機能を備えていますが、ビューア アプリケーションは現在 PDF ファイルを結合できません。

PDF ファイルを結合して Android で実行するツールを私は知りませんが、簡単に間違っている可能性があります。

暗号化に関しては、すべての入力ファイルを復号化し、最終ファイルを個別の操作として暗号化する必要があります。したがって、複数の入力ファイルを指定できる UI に加えて、それらを結合する順序 (実際には、それぞれのページを使用する順序も潜在的に) を指定できる必要があります。復号化のためのパスワードと最終的な暗号化方法を指定します。非常に複雑な UI。

于 2012-11-20T08:20:06.960 に答える
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 を暗号化する必要があります。

于 2016-02-26T12:40:31.043 に答える