29
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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レンダリングオブジェクト生成する。

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

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

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

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

.java
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に貼り付ける

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

5. 後始末。

.java
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 を使えば簡単に実現可能です。
.java
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?