ドキュメント · PDF ツールキット
ブラウザ タブがアップロードせずに PDF を読み書きする方法
· 仕組み
pdf プライバシー ウェブワーカー
「ブラウザで実行できる」というのは、理解してテストできる主張です。この投稿では、ファイル ピッカーから Web ワーカーを介してメモリに PDF を送り、ダウンロードとして戻します。各ステップの内容とサーバーが関与しない理由を説明します。
ファイル ピッカーはアップロードではありません。ファイルを選択するときの混乱の瞬間は、ファイルを送信するときのように見えます。
多くのサイトでは選択したファイルがすぐに送信されるため、ファイル チューザーはアップロード コントロールに似ています。選択だけではその転送は必要ありません。このツールキットでは、ブラウザーはユーザーが選択した File オブジェクトへのページ アクセスを許可し、コントローラーはタブ メモリに PDF バイトを読み取る前にそのタイプとサイズを検証します。
境界は観察可能です。ドキュメントを選択すると、ローカル インターフェイスの状態が変更され、名前、サイズ、ページ数が表示され、操作が有効になります。ファイルはアプリケーションのエンドポイントにポストされません。 PDF の上限は 50 MB、イメージの上限は 30 MB であり、高コストの処理が開始される前に適用されます。
ディスクからメモリへ — ファイル API がサイト独自の JavaScript が読み取れるバイト配列をページに渡す方法
PDF の場合、`arrayBuffer()` はバイトを提供し、`Uint8Array` はワーカー呼び出し用にバイトを保持します。不要な 2 回目の読み取りを避けるために、イメージ バッチは別の方法で処理されます。生のファイル オブジェクトは、ブラウザーのイメージが準備されるまで保持されます。これらは、リモート ストレージやアカウント履歴ではなく、現在のブラウザー コンテキスト内のメモリ操作です。
最初の PDF は、ワーカーの `info` 呼び出しを通じて検査されるため、ページ数が決定される間に大きなドキュメントによってペイントがブロックされることはありません。このタブには、ソース バイト、パーサーの状態、準備されたアセット、および最終的な出力を一時的にまとめて保持できます。ローカル処理では依然として実デバイスのリソースが消費されるため、クリアまたはクローズが重要になります。
ほとんどの PDF 変換はツールキット ワーカーを使用します。 PDF 解析とキャンバス エンコーディングには別個の分割があります
専用のモジュール ワーカーを介して、結合、分割、抽出、削除、並べ替え、回転、ウォーターマーク、および最終的なイメージから PDF へのアセンブリ呼び出し pdf-lib を実行します。進行状況とキャンセルのメッセージはその境界を越えますが、計算作業はプライマリ インターフェイス スレッドから遠ざかります。ファイルをクリアすると、ガベージ コレクションを待たずにワーカーが終了します。
PDF-to-image は重要な例外です。 pdf.js は解析に独自のワーカーを使用しますが、ブラウザーのキャンバス エンコーディングはメイン スレッドに残す必要があります。レンダラーはページ間で譲歩するため、コントロールと進行状況を再描画できます。すべての変換が 1 つのワーカー内で完全に実行されると言うと、出荷された実装と矛盾します。
解析と書き込みはローカル段階ですが、画像の準備とキャンバスのエンコードはメインスレッドで実行できます
一般的なパイプラインは読み取り、解釈、変換、エンコードですが、各操作は独自の具体的な機構を選択します。ページコピー操作は、pdf-lib に新しいドキュメントを構築するよう要求します。回転により追加のページ メタデータが変更されます。透かしは図面を追加します。 PDF-to-image はページをレンダリングし、images-to-PDF はワーカーのアセンブリの前にブラウザでデコードされた画像を準備します。
これらの違いは忠実度に影響します。ページをコピーすると、選択可能なコンテンツが保持されます。 PNG または JPEG にレンダリングすると、ページがピクセルに変わり、テキスト レイヤーが失われます。 PNG/JPEG 以外のイメージは、PDF アセンブリの前に、PNG としてデコードおよび再エンコードされる場合があります。 「ローカル」とはデータの移動を表すものであり、1 つの普遍的な変換アルゴリズムを表すものではありません。
ダウンロードはローカル オブジェクトです。Blob とオブジェクト URL によって、どのサーバーにも存在しなかったファイルがどのように提供されるか
各操作は、インターフェイスが適切なメディア タイプの BLOB にラップするバイトまたは ZIP を返します。結果アクションは共有 `downloadBlob` ヘルパーを呼び出します。これにより、サーバー ファイルに移動するのではなく、ブラウザーのダウンロードが作成されます。生成されたアーティファクトは、ユーザーが通常のデバイス ストレージに保存する前にメモリ内に存在していました。
オーガナイザーのサムネイルも Blob オブジェクト URL を使用しますが、そのライフサイクルは明示的です。古い URL は新しい読み込みの前に取り消され、破棄またはクリア時にすべて取り消されます。この区別により、ローカルのプライバシー要求によってメモリ リークが隠蔽されるのを防ぎます。ダウンロードされると、ファイルは通常のデバイスのバックアップおよび共有ルールに従います。
制限がデバイスのメモリである理由 — オリジナル、解析された構造、および書き換えられたコピーはすべて RAM 内に同時に存在します
ローカル作業は、RAM とブラウザのポリシー、および明示的な入力上限によって制限されます。 PDF は、ソース バイト、解析されたオブジェクト モデル、転送されたワーカー バッファ、プレビュー、およびシリアル化された出力として同時に存在できます。ラスター ページでは大きなキャンバスが追加されるため、レンダラーはピクセル バジェットを測定し、割り当て前にスケールを削減する場合があります。
50 MB 未満であっても、携帯電話はデスクトップよりも早く苦戦する可能性があります。これは、圧縮ファイルのサイズはデコードされたページ画像についてほとんど影響しないためです。無関係なタブを閉じたり、処理するページを減らしたり、負荷の高いジョブにはより大きなデバイスを使用したりしてください。ハード キャップは、PDF ごとに 50 MB、画像ごとに 30 MB のままです。記憶力は、固定された制限がないと主張する言い訳にはなりません。
他の ToolAcre 製品がネットワークを使用する場合があります。同意された本番環境の分析も個別に行われます
リポジトリには、他の 2 つの ToolAcre 製品が設計上ネットワークに接続しているため、ローカルの動作はサイト全体で一般化するのではなく、製品ごとに検証する必要があると記載されています。 PDF オペレーション コードにはドキュメントを運ぶエンドポイントがなく、自動分離テストによって処理中にその不変性がチェックされます。
サイト全体の分析は、同意後、正規の実稼働ホストでのみ実行できます。その ToolAcre イベントの許可リストでは、ファイル名、内容、貼り付けたテキスト、URL、および正確なファイル サイズが除外されていますが、Google スクリプトはプライバシー ポリシーで規定されているサードパーティ コードのままです。静的アセットまたは分析リクエストは、ドキュメントのアップロードとは異なります。
要点 — すべてのステップはデバイス上で行われ、PDF ツールキットのページとネットワーク パネルで確認できます。
完全なライフサイクルが表示されます。ファイルを選択し、検証して読み取り、適切なワーカーまたはレンダリング パスを使用してローカルで変換し、出力を BLOB にラップしてダウンロードし、バッファーとオブジェクト URL をクリアします。これらのページ操作を実行するためにアプリケーション サーバーは必要ありません。
「ブラウザ内」をスローガンではなく、検査できるアーキテクチャとして扱います。リクエストを監視し、操作固有のメモを読み、終了したらクリア ファイルを使用してメモリを解放します。このコントロールは、オーガナイザー イメージを解放し、参照を削除し、ワーカーを終了することで、メモリ負荷とタブ内の機密文書素材の有効期間の両方を軽減します。まずダウンロードし、保存されたファイルを確認してからクリアしてください。ローカル処理では、早すぎて破棄された結果に対するリモート フォールバックを意図的に提供しません。