[Android]4.2でpdf表示する

Androidでpdf表示する

Android端末で開発するアプリ内において、pdfを表示したいという案件がありました。

少し調べた所、API Level 21(Android 5)以降は標準でpdf表示をサポートしているみたいです。
最近の端末であれば、問題ないですが、まだまだAndroid4.2なんかの端末を利用しているところは多い、、、

でもそこはAndroid

ええ感じのライブラリが結構あります

pdfを表示するライブラリ

さすがはAndroid
フリーで使用できるライブラリがいろいろと出て来ます

なんか簡単そうなのでandoird-pdfを使ってみます

android-pdfの実装

もうコード書いたほうがわかりやすいと思うので、書きながら説明
AndroidStudioを用いた場合のサンプルです

ちなみに、下記に今回のサンプルプロジェクトをおいておきました
https://github.com/s-makinaga/PdfTest

[ build.gradle ]

dependencies {
    ・・・・・・
    compile 'com.joanzapata.pdfview:android-pdfview:1.0.+@aar'
}

ライブラリの追加です
Sync Projects with Gradle Files を実行しておいてください
勝手にライブラリをダウンロードしてくれます

 

[ activity_main.xml ]

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.westunitis.pdftest.MainActivity">

    <com.joanzapata.pdfview.PDFView 
        android:id="@+id/pdfview" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent"/>

</RelativeLayout>

レイアウトにpdfviewのオブジェクトをおいてあげてます
これでほぼ完了

 

[ pdfの準備 ]

今回はassetに配置したpdfを読むことにします
下記ディレクトリになんか適当にpdfファイルを突っ込んでください

/app/src/main/assets/

私は test.pdf を作成して配置しました

 

[ MainActivity.java ]

public class MainActivity extends AppCompatActivity {

    PDFView pdfView;
    Button btTest1;
    Button btTest2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        pdfView = (PDFView) findViewById(R.id.pdfview);
        pdfView.fromAsset("test.pdf").load();

    }
}

2行追加するだけです

PDFView のインスタンスを作成してあげて
findViewByIdで、レイアウト上に配置したオブジェクトに関連付けます
pdfView.fromAssetで、assetsに配置したpdfファイルを読み込んで
load()で表示

これだけ

たったこれだけでpdfが表示できます

ズームとかしたい

ちなみに、案件の中にズームとかもあったので、、、

たとえば、ズームイン・ズームアウトボタンを押下したさいにズームする、といった処理を入れる場合、こんな感じ

btTest1 = (Button)findViewById(R.id.test1);
        btTest1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                float zoom = pdfView.getZoom() + (float) 0.5;
                pdfView.zoomCenteredTo(zoom, new PointF(0, 0));
            }
        });

PdfViewのオブジェクトに対して、zoomCenterdTo()です

1つ目の引数は倍率
getZoom()で現在の倍率を取得できるので、そいつに50%追加してます

2つ目の引数はよくわからない、、、
ドキュメントが見当たらないので、、、
PointFのオブジェクトを渡すみたいなので、(0,0)で初期化して渡しています
もう少し調査が必要、、、

それでもひとまずこれで、ボタン押下によるズームイン・ズームアウトができるようになりました。

めでたしめでたし

Androidはいろいろ便利なライブラリが公開されているので便利ですね