web-dev-qa-db-ja.com

Chromeサイレントプリントの拡張機能?

PDFファイルを印刷するサイレント印刷Webアプリケーションを作成しました。重要なのは、JavaScriptをPDFファイルに追加して、自動的に印刷することでした。

これを行うには、アクロバットリーダーでPDFをChromeで開きます。これにより、スクリプトを実行できます(適切なアクセス許可で)。

しかし、発表されたとおり、npapiの問題により、このソリューションはchrome 45​​以降は機能しません。

考えられる解決策は、最近リリースされたchrome拡張機能のprintProviderを使用することだと思います。

それでも、printProviderイベントを起動する方法を想像することはできません。だから問題は:サイレントプリントWebアプリケーションを作成するためにchrome拡張機能で考えてもいいですか。また、HTMLページの埋め込みPDFのプリントジョブを起動して処理するにはどうすればよいですか。 。

8
Diego

最後に、私はこの問題を見つけることができなかったため、この問題の許容可能な解決策に到達しましたが、同じ問題を含む多くの投稿を読んで、ここに私の解決策を残します。

したがって、まずプリンタをGoogleクラウドプリントに追加し、次にプロジェクトを Google Developers Console に追加する必要があります。

次に、このスクリプトを追加し、何かを印刷する必要があるときはいつでも、print()関数を実行します。このメソッドは、コンテンツに示されているドキュメントを印刷します

アプリケーションは、プリンタを管理する許可を一度求めます。

function auth() {
  gapi.auth.authorize({
    'client_id': 'YOUR_GOOGLE_API_CLIENT_ID',
    'scope': 'https://www.googleapis.com/auth/cloudprint',
    'immediate': true
  });

}

function print() {
  var xhr = new XMLHttpRequest();
  var q = new FormData()
  q.append('xsrf', gapi.auth.getToken().access_token);
  q.append('printerid', 'YOUR_GOOGLE_CLOUD_PRINTER_ID');
  q.append('jobid', '');
  q.append('title', 'silentPrintTest');
  q.append('contentType', 'url');
  q.append('content',"http://www.pdf995.com/samples/pdf.pdf");
  q.append('ticket', '{ "version": "1.0", "print": {}}');


  xhr.open('POST', 'https://www.google.com/cloudprint/submit');
  xhr.setRequestHeader('Authorization', 'Bearer ' + gapi.auth.getToken().access_token);
  xhr.onload = function () {
    try {
      var r = JSON.parse(xhr.responseText);
      console.log(r.message)
    } catch (e) {
      console.log(xhr.responseText)
    }
  }

  xhr.send(q)

}

window.addEventListener('load', auth);
<script src="https://apis.google.com/js/client.js"></script>

とにかく、これはドキュメントに表示されていても、このスクリプトは 'Access-Control-Allow-Origin'エラーをスローします...これを機能させることができませんでした:(

Google APIは、クロスオリジンリソースシェアリング(CORS)を使用したリクエストとレスポンスをサポートしています。 CORSを使用するために、完全なJavaScriptクライアントライブラリをロードする必要はありません。ただし、アプリケーションでユーザーの個人情報にアクセスする場合は、GoogleのOAuth 2.0メカニズムで動作する必要があります。これを可能にするために、GoogleはJavaScriptのサブセットであるスタンドアロン認証クライアントを提供していますクライアント。

これを投げるには、これをインストールする必要がありましたchrome extension [〜#〜] cors [〜#〜] 。誰かがこれを改善すると確信していますこれを回避するためのスクリプトchrome拡張機能。

7
Diego

Npapiの削除後、これがプログラムでのみ可能であるとは思いません。現在私が知っている唯一の方法は、chromeサイレント印刷する方法です。chromeキオスクモードを使用しています。これは、Chromeの起動時に設定する必要があるフラグ(モード)です。

これらのSO投稿を見てください:

Google ChromeでKIOSKモードを使用したサイレント印刷(直接)

実行中Chromeキオスクモードの拡張機能付き

1
Brian

アプリケーションをURIスキームに登録して、ローカルアプリケーションをサイレントに印刷するようにトリガーできます。設定はかなり簡単で簡単です。それはシームレスな体験です。私は完全な例を挙げてここにソリューションを投稿しました:

https://stackoverflow.com/a/37601807/409319

1
Jun Xie

これはブラウザプラグイン(Java + NPAPI、ActiveXなど)を使用して可能でしたが、数年前からほとんどのブラウザでブラックリストに登録されています。

同様の手法を使用する最新のソリューションに関心がある場合、アーキテクチャには通常次のものが必要です。

  1. Localhostに戻るWebSocket、HTTP、またはカスタムURI接続
  2. ローカルで実行されているアプリとWebトランスポート(JavaScriptまたはカスタムURIスキーム)を介して通信するAPI。

これらのテクノロジーを活用するプロジェクトの詳細(いくつかはオープンソースです)は、こちらから入手できます。 https://stackoverflow.com/a/28783269/319675

これらのプロジェクトのソースコードは変わる可能性があるため(数百行から数万行)、特定のプロジェクトのAPIについて問い合わせない限り、コードスニペットは大きすぎます。

補足:一部のテクノロジーは専用のクラウドリソースを提供し、潜在的な遅延とプライバシーを犠牲にして利便性を追加します。これを書いている時点で、最も人気のある「無料」のクラウドソリューションであるGoogleクラウドプリントは、2020年12月に廃止される予定です。

0
tresf