Cloud PrintをGoogle Apps Scriptから使う【GAS】

世界ではすでにFAXは骨董品扱いになり、また日本でもペーパーレスやデータのみでの仕事が一般化してきました。しかし一方でまだプリンターが死滅することなく生きているのは、やはりそこには需要があるから。必ずしも全てがスマフォやPC上だけで済むことはなく、やはり印刷物は必要という事実は超えられません(領収書やらメールの使えない環境、PCが苦手な人などなど)。

とはいえ、FAXは通信料金が掛かる上に一度プリントアウトして送るといった面倒があるのも事実ですし、遠隔地の支店などに自動で印刷を送り込むには仕掛けが必要になります。

ところが、Google Apps Scriptには印刷に関するメソッドが用意されていないので、印刷は手動で行わなければなりません。せっかくトリガーといった便利なものがあるのにもったいない。そこで使うのがGoogle Cloud Print。これをGASから利用できれば、印刷までを自動化出来ます。また、Cloud Printなので電話回線ではなくインターネット越しに相手のプリンターに印刷を送り込め、FAX通信料金の削減が出来ます。

※2019年11月、10年続いたこのCloud Printが「2020/12/31に廃止される」と発表されました。GASから印刷を実行する唯一の手段でしたが、残念ですね。

※2020年2月、Microsoftから似たようなサービス「Universal Print」が発表されました。未対応プリンタでも可のようで、Azure ADのOAuth2.0認証からも使えるっぽい。現在プレビュー登録募集中

今回使用する資料・ファイル

今回のスレッドとは直接関係はありませんが、スマフォからGoogle Cloud Printを使う場合には、予めアプリを入れておく必要があります。AndroidであればGoogle Playから、iOSは専用アプリは公式からは出ていませんがサードパーティから出ています。

自分はAndroidから印刷をすると、自分のPCのデスクトップにVipriser経由でPDFが自動生成されるようにしています。Cloud Printは使い方次第ではすごく便利なのに、あまり広まっていないのが残念。

図:Androidから印刷実行画面

事前準備

プリンターの登録

Cloud Printはいつでもどこでも自宅や会社のプリンターに印刷ジョブを送り込めます。各社からもCloud Print対応のプリンタが出ていたりします。一方で既存の未対応プリンタは使えないのか?といったらそうではなく、PCにつないだ状態でオンライン且つ電源が入っていれば、Cloud Print対応にする事が可能です。

事前準備として、まず自分の手持ちのプリンタをCloud Printに登録しましょう。登録手順は以下の通り。

  1. Cloud Printに自分のアカウントでログインします。この画面はプリンタ管理画面でもあります。
  2. Google Chromeにて「chrome://devices」へアクセスする
  3.  「従来のプリンタ」をクリックする
  4. 自分のPCに登録済みのプリンタ一覧が検出されます。Cloud Printに追加したいものだけ選んで「プリンタ追加」をクリック
  5. これで自分のアカウントのCloud Printにプリンターが登録されました。
  6. プリンタ管理画面に戻るとプリンタが一覧に出てきます。
  7. このプリンタを他の人にも使えるようにするには、共有ボタンをクリックします。
  8. ドキュメントの共有と同じく、アクセス権限をGoogleアカウントで追加します。リンクを知っていれば誰でも使える設定にも可能です。
  9. 自分は今回、PDF化するVipRiser仮想プリンタを対象に追加しました。

図:プリンタを追加する画面

図:プリンタ登録画面

図:登録されたプリンタ一覧

図:クラウドプリント共有画面

プロジェクトの作成

Google Cloud Print APIはGoogle Cloud Platformに登録のあるAPIではないのですが、OAuth2.0認証が必要なので、クライアントIDとシークレットが必要になります。取得手順は以下の通り。これはソースコード内に記述が必要ですので、控えておきます。

  1. スクリプトエディタより「ファイル」⇒「プロジェクトのプロパティ」を開き、スクリプトIDを控えておく
  2. スクリプトエディタより「リソース」⇒「Googleの拡張サービス」をクリック
  3.  Google Cloud Platform API ダッシュボードをクリックします。
  4. GCPの管理画面になるので、左サイドの認証情報をクリックします。
  5. 認証情報を作成をクリックします。
  6. OAuthクライアントIDを選択します。
  7. 次の画面では、「ウェブアプリケーション」を選択します。
  8. 承認済みの JavaScript 生成元」では、https://script.google.comを入力
  9. 「承認済みのリダイレクト URI」には、控えておいた1.の「スクリプトIDをつなげた、値(例:https://script.google.com/macros/d/スクリプトID/usercallback)を入力して作成をクリック
  10. クライアントIDとクライアントシークレットが表示されるので、控えておく。
  11. ソースコード内に10.の内容を記述する。

図:スクリプトIDを取得しておきます。

図:認証情報を作成中の画面

OAuth2.0認証ライブラリの追加

今回のサービスは、OAuth2.0認証が必要です。以下の手順でOAuth2 for Apps Scriptライブラリを追加しましょう。

  1. スクリプトエディタを開きます。
  2. メニューより「リソース」⇒「ライブラリ」を開きます。
  3. ライブラリを追加欄に「1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF」を追加します。
  4. 現時点ではバージョンは30が最新ですので、それを選択しておきます。
  5. 保存ボタンを押して完了

これで、OAuth2.0認証にまつわる様々な関数を手軽に利用できるようになります。

図:ライブラリを追加した様子

ソースコード

GAS側コード

メニュー用のGASコード

  • 起動時にgetMySheetId関数を実行し、スプレッドシートのIDをスクリプトプロパティに格納しています。

OAuth認証用のスクリプト

  • startoauthから認証のコードが実行されます。OAuth認証実行時のスコープは、https://www.googleapis.com/auth/cloudprintです。

クラウドプリント実行用スクリプト

  • プリンターリストを作成する関数、現在のデフォルトプリンタを返す関数、セットする関数、テスト印刷する関数などを用意しておきます。
  • プリントを実行する関数におけるpayloadのcontentTypeはMIMETYPEを指定しますが、一部は省略したMIMETYPEでも可になっています。(例:google documentならばgoogle.kixでOK)
  • 画像などを印刷する場合には、Base64でエンコードしてから送ってあげる必要があります。PDFやその他バイナリファイルは必ず、getblobで取得したものをcontentに入れます(Google Drive内のファイルの場合)。
  • contentには直URLを入れても大丈夫です。
  • 今回、プリンター設定はシンプルなものだけです。他にも印刷枚数やその他いろいろなオプション設定を追加できます。

HTML側コード

認証ダイアログ用のHTML(template.html)

  • 認証用ダイアログで、GAS側のauthpage()関数で生成した認証用URLをリンクに与えています。
  • リンクをクリックするとCloud Printの認証が実行されて、Access Tokenなどが取得される仕組みです。

印刷設定用のサイドバー(sidebar.html)

  • サイドバーオープン時にGAS側のgetsetprinter()関数でセット済みプリンタを取得しています。
  • サイドバーオープン時にGAS側のgetPrinterlist()関数で登録済みプリンターの一覧を取得しています。
  • 印刷を実行するには、GAS側testprint()関数を実行するようにアクションを追加しています。

実行結果

クライアントIDやシークレットを入力後は、まず、OAuth認証をしておく必要があります。

  1. スプレッドシートのメニューより「セッティング」⇒「OAuth認証実行」をクリック
  2. GASの認証が表示されたら、普通に認証をする。
  3. 続けて、OAuth2.0認証のダイアログが出るので、許可をクリック。
  4. これで完了。スクリプトプロパティにアクセストークンなどが格納されています。

図:プリンタの管理のリクエストが表示されます。

続けて、スプレッドシートのメニューより「セッティング」⇒「印刷設定」を開くとサイドバーが開かれます。登録済みのプリンター一覧からプリンタを選び、選択をクリックします。続けて印刷を実行するをクリックすると、プリンタに現在のシートのデータが印刷されます。

図:登録済みプリンターの一覧が呼び出されて表示されます。

※今回は単純なテスト用の印刷ルーチンまででしたが、本格的に他のプログラムにこれらを準備の上組み込んでおけば、自動印刷が実現出来ます。使いみちは結構広いので、ぜひ組み込んでみましょう。

関連リンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)