Создать миниатюру PDF в Android

Я хочу сгенерировать изображение (миниатюру) из файла PDF, как это сделаноWhatsApp как показано ниже

я пытался

PDFBox (https://github.com/TomRoush/PdfBox-Android)Тика (скомпилируйте 'org.apache.tika: тика-парсеры: 1.11')AndroidPdfViewer (https://github.com/barteksc/AndroidPdfViewer)

и до сих пор не может найти способ создания изображения из PDF.

PDFBox:

Существует проблема GitHub, которая решает эту проблему (https://github.com/TomRoush/PdfBox-Android/issues/3) но это до сих пор не решено.

Замечания: Я успешно могу извлечь изображение из PDF с помощьюPDFBOX

AndroidPdfViewer:

Выпуск Github (https://github.com/barteksc/AndroidPdfViewer/issues/49)

Ответы на вопрос(1)

Решение Вопроса

PdfiumAndroid как упомянутоbarteksc Вот...

Пример кода для создания большого пальца 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:

Вызовите методgenerateImageFromPdf (URI) передавая любойPDF URI это хранится в вашем хранилище.

Метод сгенерируетPDF.png в папке PDF вашего хранилища.

 user669101608 авг. 2016 г., 14:54
я обновил свой ответ :)
 ishmaelMakitla08 авг. 2016 г., 14:45
Вы действительно должны добавить некоторые объяснения относительно того, почему этот код должен работать - вы также можете добавлять комментарии в сам код - в его текущей форме, он не дает никаких объяснений, которые могут помочь остальному сообществу понять, что вы сделали, чтобы решить /Ответ на вопрос.
 E-Place09 апр. 2018 г., 04:06
Привет, я не получаю сообщение об ошибке, но png не создает в моем хранилище. и я думаю кодParcelFileDescriptor fd = getContentResolver().openFileDescriptor(pdfUri, "r"); не работает
 Ponomarenko Oleh11 нояб. 2017 г., 00:06
Как я могу получить "ParcelFileDescriptor fd" из активов?
 Masterpiece Mas Icang20 сент. 2018 г., 04:17
не работает, я должен сохранить растровое изображение, я не могу просто установить изображение с созданным растровым изображением?

Ваш ответ на вопрос