サーバー側のPDFツールは、ファイルを運営者のコンピューターにアップロードし、そこで処理して結果を送り返します。クライアント側のツールは逆に、プログラムをブラウザにダウンロードし、そのプログラムが自分の端末でファイルを処理します。前者では文書が移動し、後者で移動するのはコードだけです。

このひとつの違いで、誰がファイルを見る可能性があるかが決まります。2種類のツールで使い心地が違い、失敗の仕方が違い、向いている作業が違う理由もここにあります。この解説では、それぞれで実際に何が起きているかを順を追って見ていきます。

サーバー側のツールで起きること

  1. ファイルを選びます。ページはそれをインターネット経由で運営者のサーバーに送ります。たいていはHTTPSでのアップロードです。
  2. サーバーがそれを保存します。少なくとも作業の間はディスクかメモリに置かれ、ほかの人のファイルと一緒にキューに並ぶことも多くあります。
  3. PDFライブラリ、変換ツール、文字認識エンジンなど、サーバー上のプログラムが作業をします。
  4. 結果も保存され、ページにダウンロード用のリンクが表示されます。
  5. どちらのファイルも、運営者独自の保持ルールに従って後で削除されます。

かつては、これが唯一の現実的な設計でした。ブラウザは遅く、PDFを読み書きできるライブラリはサーバーでしか動かなかったからです。今のブラウザは複雑なコードも速く動かせますし、JavaScriptで書かれたオープンソースのPDFライブラリなら、日常的な作業のほとんどをタブの中でこなせます。

HTTPSは手順1を盗聴から守ります。手順2〜5は運営者次第です。運営者のセキュリティ、スタッフのアクセス権、バックアップ、そしてサーバーがある国での法的義務によります。ほとんどの運営者は責任を持って扱っていますが、あなたはそれを信頼しているということです。

クライアント側のツールで起きること

  1. ツールのページを開きます。ブラウザは、ほかのウェブサイトと同じようにページとそのJavaScriptをダウンロードします。
  2. ファイルを選びます。ブラウザのFile APIがディスクからタブのメモリに読み込みます。何も送られません。
  3. タブで動くコードが作業をします。重い部分はバックグラウンドのスレッドであるWeb Workerで動くことが多く、そのためページは反応したままです。
  4. 結果はメモリ上で組み立てられ、自分のブラウザのメモリを指す一時的なリンクを通じてダウンロードとして渡されます。
  5. タブを閉じるとメモリは解放されます。何も送っていないので、ほかの場所で削除するものはありません。

KopitiamのPDFツールはこの仕組みです。ページの読み込みと描画には、Mozillaが開発するオープンソースのPDFエンジンpdf.jsを使い、その解析処理はWeb Workerで動きます。新しいPDFの作成には、別のオープンソースライブラリpdf-libを使います。どちらもタブの中で動きます。

クライアント側だからといって、ページがネットワークリクエストをまったく出さないわけではありません。コード、フォント、そして無料サイトなら広告も読み込みます。大事なのは、ファイルのデータがどのリクエストにも含まれないことです。

クライアント側のツールがオフラインでも動く理由

プログラムがいったんブラウザに入れば、動かすのにネットワークは要りません。だからオフラインテストが成り立ちます。ツールを読み込んでWi-Fiを切っても、ツールは動き続けます。本当にアップロードしているなら、すぐに失敗するはずです。

知っておくとよい細かい点もあります。KopitiamはPDFエンジンのワーカーを、ファイルをドロップしたときではなくツールのページを開いた時点で起動します。そのため、ページを読み込んだ後に接続が切れてもツールは動き続けます。あまり使われない機能の一部は、初めて使うときに追加のコードを読み込みます。ラテン文字以外の文字でテキストを扱うためのフォントエンジンなどです。これはコードがあなたのところに届くのであって、ファイルが出ていくのではありません。

クライアント側処理の本当の限界

自分の端末で作業することにはコストがあり、誠実なツールならそれを伝えるべきです。

  • メモリ。ファイル全体がタブのメモリに置かれ、処理中は複数のコピーになることもよくあります。200MBのスキャンなら、その数倍が必要になることがあります。ブラウザはタブごとにメモリの上限を設けていて、スマホではそれが最も厳しくなっています。
  • 速度。作業をするのはデータセンターではなく、あなたのパソコンやスマホです。400ページを画像に描画したり、長いスキャンのすべての写真を圧縮し直したりするのは、古い端末では目に見えて時間がかかります。
  • バッテリーと発熱。スマホで長い作業をすると、しばらくプロセッサーに強い負荷がかかります。
  • 難しい作業。大量のスキャン資料の文字認識や、複雑なOfficeファイルをレイアウトどおりに変換するなど、サーバーのソフトウェアのほうがずっと簡単な作業もあります。ほかはクライアント側のツールでも、そうした作業だけはサーバーに送るものが多くあります。

実際には、クライアント側のツールのサイズ上限は、料金ページの数字ではなく端末で決まります。Kopitiamのコードにはファイルサイズの上限がないので、とても大きなファイルは、うまく処理できるかメモリが足りなくなるかのどちらかです。先に大きなファイルを分割するか、スマホではなくパソコンのブラウザを使えば、たいてい通ります。

遅いモバイル回線で、メール用に縮める必要がある40MBのスキャンを考えてみましょう。サーバー側のツールは始める前に40MBすべてをアップロードする必要があり、その後に結果をダウンロードするので、待ち時間のほとんどはネットワークです。クライアント側のツールはどちらの転送も省けますが、圧縮はスマホ自身が行うので、長いスキャンでは時間がかかることがあります。どちらが常に速いということはありません。回線と端末によります。

ハイブリッド型と、注意して読むべき説明

すべてのツールがどちらか一方とは限りません。いくつかのパターンがあります。

  • ほぼ端末内、一部サーバー。簡単な作業はブラウザで行い、変換や文字認識はアップロードします。サイト全体の説明ではなく、ツールごとの説明を探しましょう。
  • 暗号化アップロード。ファイルはアップロードされますが、送信中も保存中も暗号化されます。何もないよりはましですが、作業するためにサーバーはやはり復号します。
  • 端末内処理とクラウド保存。作業は端末内ですが、後で開けるように結果がアカウントに保存されます。これは設計上、サーバーにコピーがあるということです。
  • デスクトップアプリ。インストールしたプログラムもクライアント側ですが、ファイルや利用データを送り返すこともできます。プライバシーポリシーはやはり重要です。

使っているのがどちらかを確かめる方法

ブラウザの開発者ツール(パソコンのほとんどのブラウザではF12)を開き、「ネットワーク」タブに移って、テスト用ファイルをツールで処理します。サーバー側のツールでは、始めたときにファイルとほぼ同じサイズのリクエストが出ていくのが見えます。クライアント側のツールでは、広告やアクセス解析の通信のような小さなリクエストしかなく、ファイルに合わせて大きくなるものはありません。Wi-Fiを切って同じ作業をするのが、同じテストの手早い版です。

どちらを選ぶか

契約書、給与明細、医療関係の書簡、身分証のスキャンなら、クライアント側を基本にするのがよいでしょう。漏れたり保管されたりするコピーがほかの場所にないからです。公開のパンフレットやメニューなら、どちらでも構いません。2,000ページの資料の文字認識のように、ブラウザが得意でない作業が必要なときは、保持ポリシーが明確で評判のよいサーバー側のツールが妥当な選択です。ただし、そのファイルのためだけに使い、習慣にはしないことです。