GoogleCloudPrintに使ってPDFを印刷する。(GoogleAPI)
Google Cloud Print とは
Googleアカウントに端末に設定しているプリンタを登録して、クラウド経由で別端末から印刷ができるサービス。
- 印刷に必要な設定
- Googleアカウントの取得
- Chromeブラウザのインストール
- プリンタの登録
- GoogleAPIから呼び出す為に必要な設定
- GoogleAPIの認証キーの取得
処理の流れ
- リフレッシュトークンの取得(一度取得していれば不要)
- アクセストークンの取得
- GoogleCloudPrintの操作(プリンタ一覧の取得,プリンタID指定で印刷実行)
事前準備
GoogleCloudPrintのプリンタ登録は、以下を参考に実施。
https://www.google.com/cloudprint/learn/
GoogleAPIのクライアントIDとシークレット取得
GoogleCloudPratformにアクセスして、認証情報を登録する。
[APIとサービス]→[認証情報]→[認証情報を作成]→[OAuthクライアントID]の順番に選択
クライアントID
とクライアントシークレット
を取得(あとで使います。)
GoogleCloudPrintへのアクセス許可と、アプリケーションに設定するコードを取得
取得したクライアントID
をURL設定して、ブラウザに直接アクセス
https://accounts.google.com/o/oauth2/auth?redirect_uri=oob&response_type=code&client_id=<ここに上記で取得したクライアントIDを指定>&scope=https://www.googleapis.com/auth/cloudprint
GoogleAPIで自動印刷
今回は、JavaのUnirestを使って、実行してみる。
重要な処理だけをピックアップして記載
HttpResponse<JsonNode> res = Unirest.post("https://www.googleapis.com/oauth2/v3/token")
.field("code", code) // 事前準備で取得したコードを設定
.field("client_id", client_id) // 事前準備で取得したクライアントIDを設定
.field("client_secret", client_secret) // 事前準備で取得したクライアントシークレットを設定
.field("grant_type", "authorization_code")
.field("redirect_uri", "oob")
.asJson();
リフレッシュトークンを取得する。
コードは一回使うと、もう使えなくなるのでリフレッシュトークンがわからなくなったら事前準備のコード取得から行う必要あり。
HttpResponse<JsonNode> res = Unirest.post("https://www.googleapis.com/oauth2/v3/token")
.field("client_id", client_id) // 事前準備で取得したクライアントIDを設定
.field("client_secret", client_secret) // 事前準備で取得したクライアントシークレットを設定
.field("grant_type", "refresh_token")
.field("refresh_token", refresh_token) // getRefreshTokenで取得したリフレッシュトークンを設定
.asJson();
アクセストークンを取得する。
リフレッシュトークンから都度アクセストークンを取得する。
プリンタにアクセスする度に、アクセストークンを取得するように構成する。
HttpResponse<JsonNode> res = Unirest.get("https://www.google.com/cloudprint/search")
.header("Authorization", token_type + " " + access_token)
.asJson();
GoogleCloudPrintに設定されているプリンタ一覧を取得する。
HttpResponse<JsonNode> res = Unirest.post("https://www.google.com/cloudprint/submit")
.header("Authorization", token_type + " " + access_token)
.field("printerid", printerid) // プリンタIDを設定:デフォルトのGoogleDriveは[__google__docs]です。
.field("title", file.getName())
.field("ticket", gson.toJson(new TicketBean()))
.field("content", file)
.asJson();
GoogleCloudPrintにローカルPDFファイルの印刷要求を行う。
fileには、java.io.File型です。
これらの処理を順番に行うことで印刷できます。
最後に
例えば、サーバ側に動的なPDF作成処理を実装し、複数クライアント側のプリンタに対して印刷を行うなど。
簡単に実現できる仕組みとなる。
今はアカウントにプリンタを登録する必要があるので難しいが
いずれ、Faxがいらなくなる日が来るかもしれない。
Author And Source
この問題について(GoogleCloudPrintに使ってPDFを印刷する。(GoogleAPI)), 我々は、より多くの情報をここで見つけました https://qiita.com/shohei-y/items/06c516dc4b2f3895e13e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .