Android 4.4 (KitKat) 以降の WebView 内の HTML コンテンツの印刷

Android 4.4 (KitKat) 以降でプリンティング・フレームワークが導入され印刷のやり方が変わった・・・ ということで、前の記事「サポートライブラリの PrintHelper を利用した印刷」でコードの書き方自体の違いを書いたわけですが・・・

実際のところ画像の印刷、という単純なところではそんなに簡単になるわけではありませんでした。

もともと簡単でしたからね。

今回は以前「WebView 内の HTML コンテンツの印刷」でやったことを、プリンティングフレームワークで簡素化されるところをみてみます。

今回はかなり簡単になります。

前回は WebView の表示内容を Picture オブジェクトとして取り出し、それを画像として保存。そして、それを他のアプリに送るという手続きを行いました。

新しい WebView (API レベル 19 以降) では、次のように記述できます。

package com.example.printtest4;

import java.io.File;

import android.os.Bundle;
import android.print.PrintAttributes;
import android.print.PrintDocumentAdapter;
import android.print.PrintJob;
import android.print.PrintManager;
import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;

public class MainActivity extends Activity
  implements OnClickListener {

  static final int REQUEST_CAPTURE_IMAGE = 100;
  WebView webView;
  Button button1;
  File webFile;

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

    webView = (WebView)findViewById(R.id.webView1);
    webView.setWebViewClient(new WebViewClient(){
      @Override
      public boolean shouldOverrideUrlLoading(
        WebView view, String url) {
        return false;
      }
    });
    button1 = (Button)findViewById(R.id.button1);
    webView.loadUrl("http://www.google.com/");
    button1.setOnClickListener(this);
  }

  @Override
  public void onClick(View v) {
    if(v.getId() == R.id.button1){
      sendContent();
    }
  }

  protected void sendContent(){
    try {
      PrintManager printManager = (PrintManager)
        getBaseContext().getSystemService(Context.PRINT_SERVICE);
      PrintDocumentAdapter adapter =
        webView.createPrintDocumentAdapter();
      PrintJob printJob = printManager.print(
        "\"" + webView.getTitle() + "\"",
        adapter, new PrintAttributes.Builder().build());
    } catch (Exception e) {
      e.printStackTrace();
      return;
    }
  }
}

要は WebView オブジェクトから直接 createPrintDocumentAdapter メソッドで、 プリントマネージャに渡す「プリントドキュメントアダプター」(PrintDocumentAdapter) が作成でき、これで直ちにプリントジョブを作成できるようになりました。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Android 開発入門