ByteScope

Remove PDF Metadata

PDF を開いて Info dict の欄と XMP を確認し、残したくないものだけ消す。このタブの中だけで、送信しません。

ファイルはブラウザから送信されません — 処理はすべてローカルで行われます。

PDFをここにドロップ

またはクリックして選択 — このタブの中で処理します。送信しません

このツールについて

メールに付けた PDF、窓口に上げた PDF、チャットに投げた PDF には、たいてい「誰が書いたか」「どのソフトが作ったか」「いつか」が残っています。居場所は Document Information Dictionary — TitleAuthorSubjectKeywordsCreatorProducerCreationDateModDate — で、catalog からぶら下がる XMP ストリームにもう一回入っていることも多い。このページはその8欄と XMP の有無を読み、消す組み合わせを自分で選べます。ファイルはこのタブから出ません。

Info dict と XMP は別のコピー

Info dict の Author を消しても XMP は触れないし、XMP を落としても Info dict は空になりません。書き出し側は同じ事実を両方に書くので、片方だけ空にすると作者がもう片方に残ります。ボタンの上の計画には、消す Info 欄、残す欄、もともと空だった欄、XMP を落とすかどうかが出ます。何も変わらない計画なら、ボタンは押せません。

渡す前に、できたファイルをもう一度読む

PDF のライブラリによっては、開く・保存するときに ProducerModDate を書き戻します。そうなると、渡されるファイルのメタデータは減るどころか増えます。消したあと、このページは出力をもう一度開き(その書き戻しは切って)、消した欄が本当に空か確認します。空でなければダウンロードは出さず、エラーを出します。パスワード付き PDF はまだ開けません。開けなかったのに成功した顔はしません。

契約書、身分証のスキャン、確定申告 — いちばんメタデータを消したいファイルは、いちばん知らないサーバーへ送りたくないファイルでもあります。このページは裏に API のない静的ファイルです。PDF は File API で開き、JavaScript で処理し、きれいなバイト列はブラウザが作ったダウンロードです。ネットワークを切っても動きます。

よくある質問

PDF はどこかへ送信されますか?

されません。File API でこの端末の中で開き、このタブで解析し、きれいな PDF はメモリ上のバイトからブラウザが作ったダウンロードです。裏に API がないので、送り先が原理的にありません。本当に掃除したい PDF — 契約書、身分証、税の書類 — にとって、それがこのページの理由そのものです。

Info dictionary と XMP は何が違いますか?

Info dictionary は trailer に載っている8つの古典的なキーです(TitleAuthorSubjectKeywordsCreatorProducerCreationDateModDate)。XMP は catalog の /Metadata が指す、別の XML パケットです。書き出し側はたいてい両方を埋めます。片方を消してももう片方は残るので、計画では Info の欄と XMP を別々に選べます。

パスワード付き PDF のロックは外せますか?

外せません。暗号化された PDF は読み込みが例外を投げ、このページはそれを捕まえてそのまま伝えます。暗号化を無視せず、パスワードを推測せず、読んでいないファイルをきれいにした顔もしません。ロック解除は後のツールです。開けてもいないファイルを掃除したことにする方が、断るより悪い。

メタデータを消すと PDF は壊れますか。署名は?

ページの中身には触れません。消すのは Info dict のキーと、指定があれば catalog の /Metadata ストリームだけです。電子署名付き PDF は別の話で、ファイルのバイトが変われば署名は無効になります。それはどのメタデータ削除でも同じです。署名の検証が必要なら消さないこと。作者を消したいなら、その署名は消したかったメタデータごと縛っていました。

メタデータが本当に消えたことは、どうすれば分かりますか?

ダウンロードを出す前に、出力をもう一度開き、消した欄を確認します。ProducerModDate が戻ってきていれば、ファイルではなくエラーが出ます。できたファイルをこのページに再ドロップしてもいいし、元ファイルと掃除後を binary diff で比べてもいい。解析できない日付は、黙って書き直さず、元の文字列のまま「解析できない」と出します。