Base64 を PDF に変換

API のレスポンス、メール、データベースから取得した Base64 を貼り付けて、PDF に戻します。埋め込みビューアーで内容を確認し、通常の .pdf ファイルとして保存できます。

すべてブラウザ内で処理され、データはアップロードされません。

使い方

  1. PDF の Base64 文字列、または data:application/pdf;base64, というプレフィックスで始まる data URI を、入力欄に貼り付けます。
  2. ファイルが PDF として判別されたことを確認し、ビューアーで内容を読みます。
  3. PDF を「ダウンロード」して、お使いのデバイスに保存します。

API のレスポンスから Base64 をコピーする

請求書、配送ラベル、レポート、署名済み契約書を生成するサービスは、{"filename": "label.pdf", "data": "JVBERi0..."} のように JSON の中に PDF を入れて返すことがよくあります。フィールド名の後ろにある引用符の間のテキストだけをコピーし、次の点に注意してください。

  • エスケープされたスラッシュ。PHP の json_encode など一部の JSON エンコーダーは、すべての / を \/ と書き出します。/ は通常の Base64 文字なので、貼り付ける前に \/ を / に置き換えるか、先に JSON を解析してから値をコピーしてください。
  • 引用符とカンマ。前後の引用符と末尾のカンマは含めないでください。
  • 改行。76 文字で折り返された値のように、Base64 の中にあるスペースや実際の改行は問題なく、削除する必要はありません。一方、生の JSON に含まれる文字としての \n や \r\n は話が別です。これらはバックスラッシュを含む文字の並びなので、削除する必要があります。

ブラウザの開発者ツールで、解析済みの表示から値をコピーすれば、こうしたエスケープの問題をすべて避けられます。

メールから PDF 添付ファイルを取り出す

メールの添付ファイルは、生のメッセージデータの中に Base64 で格納されています。メッセージのソースを開き(Gmail では「メッセージのソースを表示」、Thunderbird では「メッセージのソース」、Apple Mail では「ソース」)、ヘッダーに Content-Type: application/pdf(またはファイル名が .pdf の application/octet-stream)と Content-Transfer-Encoding: base64 を含むパートを探します。それらのヘッダーの下にある空行の次から、MIME 境界である -- で始まる次の行の手前までのブロックをコピーしてください。ここにはそのまま貼り付けてかまいません。改行は無視されます。

自作の Web アプリで Base64 の PDF を表示する

フロントエンドで受け取った Base64 の PDF を表示するには、data URI よりも Blob URL のほうが確実です。data URI は、ブラウザによっては新しいタブで開くことを拒否されます。

const bytes = Uint8Array.from(atob(base64), c => c.charCodeAt(0));
const blob = new Blob([bytes], { type: 'application/pdf' });
const url = URL.createObjectURL(blob);
window.open(url); // または <iframe> の src として使用

文書が不要になったら URL.revokeObjectURL(url) を呼び出して、メモリを解放してください。なお、atob は標準の Base64 アルファベットしか受け付けないため、URL セーフな入力(- と _)は先に変換しておく必要があります。

よくある質問

Base64 が PDF として判別されないのはなぜですか?
Base64 化された PDF は、%PDF- をエンコードした JVBERi0 で始まります。引用符、フィールド名、その他のテキストで始まっている場合は削除してください。SlZCRVJ で始まっている場合は、PDF が二重に Base64 エンコードされています。Base64 デコーダーで一度デコードし、その結果をここに貼り付けてください。それ以外の場合は、別の種類のファイルかもしれません。Base64 をファイルに変換で種類を判別できます。
PDF はダウンロードできるのに開けません。何が原因ですか?

最も可能性が高いのは、Base64 が途中で切れていることです。ログ、コンソール、データベースツールでは、長い値が切り詰められることがよくあります。PDF は末尾が欠けていると読み込めません。各ページの位置を示す相互参照テーブルが、ファイルの末尾付近に格納されているためです。できれば元のレスポンスをファイルに保存するなどして、値全体をもう一度コピーしてください。

スマートフォンでプレビューが空白になります。ファイルが壊れているのですか?

必ずしもそうではありません。モバイルブラウザの中には、ページ内に PDF を表示できないものがあります。ファイルをダウンロードし、PDF リーダーで開いて確認してください。

パスワード保護された PDF もデコードできますか?

はい。デコードすると、暗号化も含めてファイルが 1 バイトも違わずに復元されます。プレビューではパスワードを求められるか、空のままになることがありますが、ダウンロードしたファイルはパスワードを入力すれば、どの PDF リーダーでも開けます。

文書はどこかにアップロードされますか?

いいえ。デコードとプレビューはブラウザ内で行われるため、契約書、給与明細、診療記録などの機密性の高い PDF がお使いのデバイスの外に出ることはありません。