以下に示すように、WhatsAppのようにpdfファイルから画像(サムネイル)を生成したい
私が試してみました
それでも、pdfから画像を生成する方法を見つけることができません。
PDFBox:
この問題に対処するgithubの問題があります( https://github.com/TomRoush/PdfBox-Android/issues/ )が、これはまだ解決されていません。
注:PDF using[〜 #〜] pdfbox [〜#〜]
AndroidPdfViewer:
Githubの問題( https://github.com/barteksc/AndroidPdfViewer/issues/49 )
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フォルダーに生成します。