web-dev-qa-db-ja.com

AndroidでPDFのサムネイルを生成

以下に示すように、WhatsAppのようにpdfファイルから画像(サムネイル)を生成したい WhatsApp

私が試してみました

  1. PDFBox(- https://github.com/TomRoush/PdfBox-Android
  2. Tika(コンパイル 'org.Apache.tika:tika-parsers:1.11')
  3. AndroidPdfViewerhttps://github.com/barteksc/AndroidPdfViewer

それでも、pdfから画像を生成する方法を見つけることができません。


PDFBox:

この問題に対処するgithubの問題があります( https://github.com/TomRoush/PdfBox-Android/issues/ )が、これはまだ解決されていません。

注:PDF using[〜 #〜] pdfbox [〜#〜]


AndroidPdfViewer:

Githubの問題( https://github.com/barteksc/AndroidPdfViewer/issues/49

17
shanraisshan

barteksc で述べたように PdfiumAndroid を使用してください...

PDFサムを生成するためのサンプルコード

//PdfiumAndroid (https://github.com/barteksc/PdfiumAndroid)
//https://github.com/barteksc/AndroidPdfViewer/issues/49
void generateImageFromPdf(Uri pdfUri) {
    int pageNumber = 0;
    PdfiumCore pdfiumCore = new PdfiumCore(this);
    try {
        //http://www.programcreek.com/Java-api-examples/index.php?api=Android.os.ParcelFileDescriptor
        ParcelFileDescriptor fd = getContentResolver().openFileDescriptor(pdfUri, "r");
        PdfDocument pdfDocument = pdfiumCore.newDocument(fd);
        pdfiumCore.openPage(pdfDocument, pageNumber);
        int width = pdfiumCore.getPageWidthPoint(pdfDocument, pageNumber);
        int height = pdfiumCore.getPageHeightPoint(pdfDocument, pageNumber);
        Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        pdfiumCore.renderPageBitmap(pdfDocument, bmp, pageNumber, 0, 0, width, height);
        saveImage(bmp);
        pdfiumCore.closeDocument(pdfDocument); // important!
    } catch(Exception e) {
        //todo with exception
    }
}

public final static String FOLDER = Environment.getExternalStorageDirectory() + "/PDF";
private void saveImage(Bitmap bmp) {
    FileOutputStream out = null;
    try {
        File folder = new File(FOLDER);
        if(!folder.exists())
            folder.mkdirs();
        File file = new File(folder, "PDF.png");
        out = new FileOutputStream(file);
        bmp.compress(Bitmap.CompressFormat.PNG, 100, out); // bmp is your Bitmap instance
    } catch (Exception e) {
        //todo with exception
    } finally {
        try {
            if (out != null)
                out.close();
        } catch (Exception e) {
            //todo with exception
        }
    }
}

更新:

Build.gradleにライブラリを含める

compile 'com.github.barteksc:pdfium-Android:1.4.0'

任意の画像を生成するためPDF Page:

ストレージに保存されているPDF uriを渡すことにより、メソッドgenerateImageFromPdf(uri)を呼び出します。

このメソッドは、ストレージのPDF.pngをPDFフォルダーに生成します。

22
user6691016