2016-08-08 29 views
7

Ich möchte das Bild (Thumbnail) aus PDF-Datei erzeugen, nur durch getan mag WhatsApp wie unten WhatsAppgenerieren Miniaturbild Pdf in Android

I

versucht
  1. PDFBox haben gezeigt (https://github.com/TomRoush/PdfBox-Android)
  2. Tika (kompilieren 'org.apache.tika: tika-Parser: 1.11')
  3. AndroidPdfViewer (https://github.com/barteksc/AndroidPdfViewer)

und nicht in der Lage immer noch einen Weg finden, Bild von pdf zu erzeugen.


PDFBox:

Es gibt ein Github Problem, das mit diesem Problem beschäftigt (https://github.com/TomRoush/PdfBox-Android/issues/3), aber das ist immer noch ungelöst.

Hinweis: Ich bin erfolgreich in der Lage Bild von PDF zu extrahieren mit PDFBox


AndroidPdfViewer:

Github Ausgabe (https://github.com/barteksc/AndroidPdfViewer/issues/49)

Antwort

12

Verwenden PdfiumAndroid als vonerwähnthier ...

Beispielcode für pdf Daumen

//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 
     } 
    } 
} 

Update-Erzeugung: Bild Zur Erzeugung

Fügen Bibliothek in build.gradle

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

von jedem PDF Pag e:

Rufen Sie die Methode generateImageFromPdf (uri) durch den PDF uri vorbei, die in Ihrem Speicher gespeichert wird.

Das Verfahren generiert die pdf.png im PDF-Ordnern Ihres Speichers.

+1

Sie sollten wirklich eine Erklärung hinzufügen, warum dieser Code funktionieren sollte - Sie können auch Kommentare in den Code selbst einfügen - in seiner aktuellen Form bietet es keine Erklärung, die dem Rest der Gemeinschaft helfen kann zu verstehen, was Sie haben getan, um die Frage zu lösen/zu beantworten. – ishmaelMakitla

+2

Ich habe meine Antwort aktualisiert :) –

+0

Wie bekomme ich den "ParcelFileDescriptor fd" aus Assets? –