androidのPDF関連のクラスでViewをPDFファイル出力ソース

androidのPDF関連のクラスを使ってViewをPDFファイル出力で使ったソースの一部です。
オプションメニューにボタンを追加して、それを押すと
バックグラウンドで、PDFファイルを作成します。
PDFファイル作成の負荷で、処理が時間がかかるためバックグラウンド(Thread)にしています。

 

   @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // TODO 自動生成されたメソッド・スタブ
        super.onCreateOptionsMenu(menu, inflater);
        MenuItem mitem0 = menu.add(Menu.NONE,0,0,"PDF出力");
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO 自動生成されたメソッド・スタブ
        int id = item.getItemId();
        switch (id) {
            case 0:
                /*
                PDF出力 バックグランドで実行
                 */
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        outputPDF();
                    }
                }).start();
                break;
            case 1:
                break;
            default:
                break;
        }
        return super.onOptionsItemSelected(item);
    }

    private void outputPDF() {
        final String FILENAME = "output.pdf";
        File fileMemo = null; //
        String sdPath;

        //外部ストレージの現在の状態をチェック
        String state = Environment.getExternalStorageState();
        //マウントされていて読み書きが可能かどうか確認
        if(Environment.MEDIA_MOUNTED.equals(state)){
            Log.v("読み書き","読み書き可能");
            //外部ストレージのパスを取得
            File extDir = Environment.getExternalStorageDirectory();
            sdPath = extDir.getPath();

            //保存先のパス
            String savePath = File.separator +"Download"+File.separator+
                    getActivity().getPackageName()+File.separator+
                    FILENAME;

            sdPath += savePath;
            Log.v("保存先",""+sdPath);

            //フォルダ作成
            fileMemo = new File(sdPath);
            fileMemo.getParentFile().mkdirs();
        }else{
            Log.v("エラー","エラー読み書き不可");
            return;
        }
        Log.v("START","STart Creating PDF File");
        FileOutputStream fileOutputStream=null;

        try {
            fileOutputStream = new FileOutputStream(fileMemo,true);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        PdfDocument document = new PdfDocument();
        PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(1080, 1920,1).create();
        PdfDocument.Page page = document.startPage(pageInfo);
        //View content = v.findViewById(R.id.scrolling_graph_1);
        v.draw((page.getCanvas()));
        document.finishPage(page);
        try {
            document.writeTo(fileOutputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        // close the document
        document.close();
        Log.v("END","Finished Creating PDF File");
    }

 

androidのPDF関連のクラスを使ってViewをPDFファイル出力

androidのPDF関連のクラスについて。

API Level 19で追加された。(2013年)

▼android.graphics.pdf クラスは6つ

 

クラス名 説明
PdfDocument AndroidのコンテンツからPDFドキュメントを生成するクラス
PdfDocument.Page PDFドキュメントページを表すクラス
PdfDocument.PageInfo PdfDocument.Pageを記述するメターデータを表すクラス
PdfDocument.PageInfo.Builder PdfDocument.PageInfoを作るためのBuilder
PdfRenderer PDFドキュメントをレンダリングする
PdfRenderer.Page レンダリングのPDFドキュメントのページを表すクラス

 

Android developerのサイトのPdfDocumentクラスのページにのっていたサンプルをもとに

androidのアプリのViewからPDFファイルを作成してみました。

androidのViewからPDFを作成する場合には上記のクラスを使用する。

FragmentのonCreateView()で使っているViewからPDFを生成してみました。

ScrollViewを使用しています。

[画面]

Screenshot_20170319-193303
アプリの画面(View)をPDFファイルにできる。今回はFragmentの部分のViewをPDFファイルにした。 ただし、画面上に表示されている部分のみPDFファイルにすることができた。

 

 

 

PDF_Make
作成されたPDFの中身は、表示した部分のみとなった。ScrollViewで表示されていない部分はPDFファイル化されていない。ScrollViewを使わない場合で、一画面に収まる場合に使えそうです。

 

▼上記で使ったソースの一部

androidのPDF関連のクラスでViewをPDFファイル出力ソース