LoginSignup
29
28

More than 5 years have passed since last update.

Android 5.0でPDFビューアを作る

Last updated at Posted at 2015-01-17

はじめに

Androoid 5.0でサポートされたPDFドキュメントのレンダリングフレームワークで、これまでできなかった、PDFビューアがアプリで作ることが可能になりました。

サンプルアプリリファレンスを元に作り方を簡単にまとめました。

作り方

5つのステップだけで簡単にPDFビューアが作れます。

1. ファイルディスクリプタからPDFレンダリングオブジェクト生成する。

FileDescriptor fileDescriptor = context.getAssets().openFd("sample.pdf").getParcelFileDescriptor();
PdfRenderer pdfRenderer = new PdfRenderer(fileDescriptor);

2. 生成したレンダリングオブジェクトから、表示したいページを取得する。引数に指定。

PdfRenderer.Page currentPage = pdfRenderer.openPage(index);

3. 表示したいページサイズのBitmapを生成し、レンダリングする。

Bitmap bitmap = Bitmap.createBitmap(currentPage.getWidth(), currentPage.getHeight(),
                Bitmap.Config.ARGB_8888);
currentPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);

4. ImageViewに貼り付ける

ImageView imageView = (ImageView)findViewById(R.id.imageView);  
imageView.setImageBitmap(bitmap);

5. 後始末。

currentPage.close();
pdfRenderer.close();
fileDescriptor.close();

補足:

  • 生成するBitmapは、RGBではなくARGBということに注意
  • レンダリングは、表示モードRENDER_MODE_FOR_DISPLAYと印刷モードRENDER_MODE_FOR_DISPLAYの2種類がある。印刷モードを使う時は、スケーリングされるかPdfRenderer#shouldScaleForPrinting()で確認しておくこと
  • PdfRendererはスレッドセーフではありません。困ることはないと思うけど実装時はご注意を

もっとよくする:

  • ページ数は pdfRenderer.getPageCount()で取得できるので、全体の何ページを表示しているかUIにも反映可能
  • ImageViewに貼り付けたビューは、GestureDetector使ってビンチイン/アウトUXを高めることをおすすめします。 chrisbanes/PhotoView · GitHub を使えば簡単に実現可能です。
new PhotoViewAttacher(imageView);

蛇足:

PdfRendererクラスの中身見ると、nativeコールしてますね。Java層ではI/Fだけ用意して実装はやっぱりC言語なのですね
graphics/java/android/graphics/pdf/PdfRenderer.java - platform/frameworks/base - Git at Google

29
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
28