[WEB Tool] PDF Inspector v1.0 — PDF 内部構造ビューア使い方ガイド

[WEB Tool] PDF Inspector v1.0 — PDF 内部構造ビューア使い方ガイド

概要

PDF Inspector は、PDF ファイルの中身をブラウザだけで覗けるツールです。

中身を、オブジェクト(辞書・配列・ストリーム)、描画命令(ページを描く命令の列)、hex(生のバイト列)の 3 つの見方で同時に表示します。どこにカーソルを乗せても、他の見方の対応する場所が光ります。

ページは、このツール自身が描いています。そのため、描画を 1 命令ずつ進めたり、ページ上をクリックして「ここを塗ったのはどの命令か」を調べたりできます。上に黒い四角を重ねただけの黒塗りは、四角を描く手前で止めると、下の文字が見えます。

ほかに、追記(増分更新)の履歴と差分、壊れた PDF の診断、暗号化の解除、フォント・画像・電子署名の確認ができます。

パーサーも描画エンジンも自作で、外部ライブラリは使っていません。インストール不要で、ファイルはサーバーに送信されません。

PDF Inspector

スタートメニューから起動

トップページのスタートメニューからも起動できます。

PDF Inspector — スタートメニューから起動

スクリーンショット

PDF Inspector — RESOURCES(フォント・画像・メタデータ)

PDF Inspector — RESOURCES

PDF Inspector — PAGE(黒塗りされた状態)

PAGE タブ — 黒塗りされた状態

PDF Inspector — PAGE(スライダーを戻すと、下の文字が見える)

PAGE タブ — スライダーを戻すと、黒塗りの下の金額が見える

PDF Inspector — REVISIONS(追記の差分)

REVISIONS タブ — 後から足された 2 行が緑で出る

操作動画

操作動画

ツールの特徴

  • ブラウザ完結: インストール不要。ファイルはブラウザの中だけで解析し、サーバーには送信しません。
  • 3 方向の連動: オブジェクト・描画命令・hex のどこにカーソルを乗せても、他の対応する場所が光ります。
  • ステップ実行: ページの描画を 1 命令ずつ進めたり戻したりできます。再生ボタンで、描かれていく順番を見ることもできます。
  • クリックで命令を特定: ページ上をクリックすると、その場所を塗った命令が選ばれます。
  • 追記の差分: 増分更新で後から足された・変えられたオブジェクトと、変更前後の差分を表示します。
  • 壊れた PDF も開く: 読める範囲で開いて、どこがどう壊れているかを、ファイル上の位置つきで一覧にします。
  • 暗号化に対応: パスワードなしで開ける PDF は、そのまま中身を表示します。
  • 電子署名の確認: 署名範囲が書き換えられていないか、署名値が証明書の鍵と合うか、署名の後に追記がないかを調べます。
  • フォントの確認: 埋め込みの有無、文字コードの対応、グリフの一覧を表示します。
  • 大きなファイルにも対応: 解析は別スレッドで行い、表示は見えている部分だけを描くので、画面が固まりません。

対応形式

項目対応
ファイルPDF 1.0〜2.0。xref テーブル / xref ストリーム、オブジェクトストリーム、増分更新、リニアライズ
圧縮Flate、LZW、ASCII85、ASCIIHex、RunLength、CCITT(ファクス)、予測子(PNG / TIFF)。JPEG はブラウザのデコーダで表示
暗号化RC4(40 / 128 ビット)、AES-128、AES-256(標準セキュリティハンドラ R2〜R6)
フォントType1、TrueType、CFF(Type1C)、Type0(CID フォント)、Type3。埋め込みがないときは似たシステムフォントで代用
日本語Identity-H / V、90ms-RKSJ・EUC・UniJIS 系の CMap、縦書き
描画パス、テキスト、画像、フォーム、グラデーション(Type 1〜7)、タイリングパターン、透明、ソフトマスク、ブレンドモード、レイヤー(OC)、注釈の見た目
電子署名CMS(PKCS#7)。RSA、RSA-PSS、ECDSA(P-256 / P-384 / P-521)。SHA-1 / 256 / 384 / 512

未対応のものは「注意事項」を見てください。


まず試す:黒塗りの下を見る

PDF を知らなくても、これだけで「PDF が何でできているか」が分かります。

  1. 左の「▶ SAMPLE PDF」を押します
  2. 上の PAGE タブを押します。金額の行が、黒い帯で隠れています
  3. 2 段目のスライダーを、左へ少し戻します(または ◀ を 2 回押します)

黒い帯が消えて、Confidential amount: 12,340,000 JPY が出ます。

PDF のページは、「この文字を置く」「この四角を塗る」という命令の列です。このサンプルの黒塗りは、文字の命令を残したまま、後ろに「黒い四角を塗る」命令を足しただけのものです。だから、四角を塗る手前で止めれば、下の文字が見えます。

正しい墨消し(文字の命令そのものを削除したもの)は、このツールでも見えません。逆に言うと、このツールで見えたら、その黒塗りは失敗しています。

自分の PDF で確かめるときは、黒塗りの上をクリックしてください。右に「この位置に重なっている命令」が出ます。黒い四角(f や re f)のほかに、文字の命令(Tj や TJ)が並んでいたら、下に文字が残っています。


使い方

1. PDF を読み込む

次のどれかで読み込みます。

方法操作
ドロップPDF をページのどこかにドロップします
ファイル選択左上の枠をクリックしてファイルを選びます
URL左上の URL 欄にアドレスを入れて LOAD。同じサイト内のファイルか、CORS が許可されたファイルに限ります
サンプル「▶ SAMPLE PDF」で、黒塗りを後から足したサンプル(11.6KB)を読み込みます

壊れた PDF も、そのまま開けます。開くときにパスワードが必要な PDF では、入力欄が出ます。

2. 画面の構成

場所内容
左読み込み、ファイル情報、構造のツリー
中央8 つのタブ
右hex(バイト列)
右下ステータスバー(カーソルを乗せた場所の情報)と色の凡例

3. 上部のバー

項目内容
OBJECT 〜 STATS中央の表示を切り替えます(1〜8 キーでも切り替わります)
DIAG の横の印診断の結果。✓ は問題なし、数字は見つかった問題の数
⌘K 移動 / 検索移動・検索パレットを開きます(後述)
? HELP操作方法のヘルプを開きます
◧左パネルの表示 / 非表示

移動・検索パレットには、次の書き方ができます。

入力移動先
1212 番のオブジェクト
p33 ページ目
0x1a2bそのオフセット(16 進)にあるバイトを含むオブジェクト
それ以外辞書のキー・名前・文字列を検索

4. 左パネル

FILE INFO には、ファイルの概要が出ます。

項目内容
Size / Versionファイルサイズと、ヘッダに書かれた PDF のバージョン
Objects / Pagesオブジェクトの数とページ数
XRefクロスリファレンスの形式(table / stream)と個数
Revisionsリビジョンの数。2 以上なら、追記(増分更新)されています
Encrypted暗号化の方式(暗号化されているとき)
Featuresタグ付き、フォーム、しおりなど
Diagnostics診断で見つかった問題の数
Info 辞書タイトル、作成者、作成ソフト、日時など

STRUCTURE は、ファイルの構造のツリーです。

項目内容
Trailerファイル全体の入口。ここから /Root(カタログ)→ /Pages と辿れます
Pagesページの一覧
Objects全オブジェクトの一覧(番号順)

▸ で展開、クリックで中央に表示します。

5. OBJECT タブ

選んだオブジェクトの中身を表示します。左端の数字は、その行のバイトオフセット(16 進)です。

操作動作
行にカーソルを乗せる対応するバイトが hex で光ります
行をクリック選択して固定します
12 0 R(ピンクの文字)をクリック参照先のオブジェクトへ移動します
REFERENCED BY の「調べる」このオブジェクトを参照しているオブジェクトを探します
◀ ボタン / Backspace前の画面に戻ります

ストリーム(圧縮されたデータを持つオブジェクト)では、上に展開の過程が出ます。フィルタごとに、展開前後のサイズが並びます。途中で壊れているときは、何バイト目で失敗したかも出ます。

ストリームのボタンは次のとおりです。

ボタン動作
展開後を hex で右の hex を、展開した中身に切り替えます
生データを hex で圧縮されたままのバイト列に切り替えます
ファイル上の位置hex を元のファイルに戻して、ストリームの範囲を選択します
CONTENT で開く描画命令として開きます(ページの中身やフォームのとき)
保存展開した中身をファイルに保存します

画像のストリームでは、色空間やマスクを反映したプレビューが出ます。

6. CONTENT タブ

ページの描画命令を、1 行 1 命令で表示します。q〜Q、BT〜ET の中は字下げされます。

表示内容
上のチップ命令の種類ごとの数(テキスト、パス構築、描画、色など)と、使っているフォント・画像
行の右の % "…"文字を表示する命令(Tj / TJ)の、フォントから復元した文字
赤い行文法の問題(q と Q の数が合わない、被演算子の数が違う、など)
操作動作
行にカーソルを乗せるステータスバーに、その演算子の意味が出ます
行をクリック選択して、PAGE タブでもその命令を選択した状態にします
Tf / Do / gs などの行をダブルクリックフォントや画像など、リソースのオブジェクトを開きます
[ / ]前 / 次のページ

7. PAGE タブ

ページを描画します。

1 段目のバーは次のとおりです。

項目内容
◀ Page ▶ページの移動
− + / 幅に合わせる拡大率
注釈注釈の見た目(スタンプ、フォームの入力欄など)も描くか
不可視テキスト見えない文字(スキャン PDF の OCR 文字など)を、桃色で描きます
命令の枠すべての描画命令の範囲を、枠で表示します
PNGいま表示している絵を PNG で保存します

2 段目が、ステップ実行です。

項目内容
⏮最初の命令だけ
◀◀ / ▶▶前 / 次の「何かを塗る命令」まで飛びます
◀ / ▶1 命令戻る / 進む
⏭ 全部全部描いた状態に戻します
▶ 再生命令を順に実行して、描かれていく様子を見ます
スライダー好きな位置まで動かします
操作動作
ページ上にカーソルを乗せるその場所を塗った命令の範囲が、桃色の枠で出ます
ページ上をクリックその場所を塗った命令を選びます(緑の枠)。hex も追従します
ダブルクリックその命令を CONTENT タブで開きます

右のパネルには、次のものが出ます。

項目内容
選択中の命令命令と、塗った範囲。「ここまで実行」で、その命令まで描いた状態にします
この位置に重なっている命令クリックした場所を塗っている命令の一覧(小さいものから順)
グラフィックス状態止めた時点の、変換行列(CTM)、塗りと線の色、線幅、フォントとサイズ、切り抜き範囲など
描画の警告描けなかったもの・怪しいもの。行を押すと、その命令を選びます
注釈ページにある注釈の一覧

フォントの欄に「埋め込みなし(代用フォントで表示)」と出ているときは、その文字は、見ている PC のフォントで描かれています。ほかの PC では、別の字形になります。

8. XREF タブ

クロスリファレンス表(各オブジェクトが、ファイルの何バイト目にあるかの表)です。

列内容
番号オブジェクト番号
種類n = ファイル上にある、c = オブジェクトストリームの中、f = 空き
オフセットファイル上の位置(16 進と 10 進)
gen世代番号
中身そのオブジェクトの種類

実際の位置とずれている行は、赤で表示します。行をクリックすると、そのオブジェクトを開きます。

9. REVISIONS タブ

PDF は、変更したところだけをファイルの末尾に追記して保存できます(増分更新)。古い版は、消えずにファイルの中に残ります。

このタブは、その履歴を表示します。

表示内容
REV 0、REV 1 …リビジョン。数字が大きいほうが新しい版です
緑の横棒そのリビジョンが、ファイルのどの位置に、どれだけの大きさであるか
下の情報その時点の Info 辞書(作成ソフト、更新日時など)
四角いボタンそのリビジョンで追加・変更されたオブジェクト

ボタンを押すと、変更前(左)と変更後(右)の差分が出ます。追加された行は緑、消えた行は赤です。最初の変更行まで、自動で送られます。

ストリームは、展開した中身が文字として読めるとき(ページの描画命令や XMP など)、その行も ── 展開した中身 ── の下に並べます。サンプルでは、ページの中身(1 番)に、黒い四角と [redacted] の 2 行が足されているのが分かります。

10. DIAG タブ

診断の一覧です。ファイルを開くと、全オブジェクトを読んで、全ストリームを展開して、問題を集めます。

種類例
ERRORxref のオフセットのずれ、/Length の誤り、展開できないストリーム、読めないオブジェクト
WARNendobj がない、/Size が小さい、文法の乱れ
INFO増分更新されている、どこからも参照されていないオブジェクトがある

行をクリックすると、原因の位置を hex で選択して、関係するオブジェクトを開きます。上のボタンで、種類ごとに絞り込めます。

11. RESOURCES タブ

文書に入っているものの一覧です。上のボタンで、各項目へ飛べます。

項目内容
フォント名前、種類、エンコーディング、埋め込みの有無、ToUnicode の有無、使われているページ、注意点
画像サムネイル、大きさ、色空間、圧縮形式、サイズ
署名電子署名の中身と、確認の結果(後述)
メタデータInfo 辞書と XMP。2 つの内容が食い違っていれば、その旨を表示
添付添付ファイル。「保存」で取り出せます
フォームフォームのフィールドと、入力されている値
レイヤーオプショナルコンテンツ(表示 / 非表示を切り替えられる層)の一覧
動作するものJavaScript、外部リンク、プログラムの起動、フォームの送信など
適合性PDF/A などの宣言と、簡易チェックの結果

フォントの「グリフ一覧」を押すと、そのフォントの文字が、文字コード順のマス目で出ます。マスにカーソルを乗せると、コード、Unicode、文字幅が出ます。

フォントの注意点には、次のようなものが出ます。

  • 埋め込まれていない(環境によって見た目が変わる)
  • ToUnicode がない(コピー・検索で文字が化ける可能性)
  • /Widths と、フォント内の文字幅が食い違っている(文字間隔が崩れる可能性)

12. 電子署名の確認

署名のある PDF では、RESOURCES タブの「署名」に、次の確認結果が出ます。

確認内容
署名から除かれているのは /Contents の値だけ署名されない範囲に、余計なものが入っていないか
ファイルの最後まで署名の対象署名の後に、追記されていないか
署名範囲のハッシュが署名内の値と一致署名の後に、範囲内が書き換えられていないか
署名値を証明書の公開鍵で検証できたその証明書の鍵で署名されたか

結果は、上に 1 行でまとめて出ます。

表示意味
署名は有効(信頼性は未確認)4 つとも問題なし
署名は有効・署名後に追記あり署名そのものは有効ですが、その後にファイルが変更されています。変更の内容は REVISIONS タブで確認できます
問題ありどれかが合いません

確かめていないこと があります。証明書が、信頼できる発行元のものか。失効していないか。この 2 つは、このツールでは分かりません。「署名は有効」は、「書き換えられていない」「その鍵で署名された」という意味で、「署名者が本人である」という意味ではありません。

13. HEX

バイト列です。左が 16 進、右が ASCII(文字として読めるバイト)です。

文字の色は、そのバイトが何に属するかです(凡例は右下)。オブジェクト、ストリームの辞書と中身、xref、trailer などで色が変わります。古いリビジョンに上書きされた部分や、どこからも使われていない部分は、別の色になります。

表示意味
オレンジの背景カーソルを乗せている行・命令の範囲
緑の背景選択中の範囲
白い枠カーソルの下にあるバイト
操作動作
バイトにカーソルを乗せるそのバイトが何に属するかを、ステータスバーに表示します
バイトをクリックそのバイトを含むオブジェクト・命令を開きます

hex の表示対象は、見ているものに合わせて切り替わります。

表示対象切り替わるとき
FILE元のファイル全体
Page N のコンテンツCONTENT / PAGE タブで、ページの描画命令を見ているとき(展開して連結したもの)
stream N を展開したデータストリームの「展開後を hex で」を押したとき
objstm Nオブジェクトストリームの中のオブジェクトを見ているとき

上の FILE ボタンで、元のファイルに戻ります。

14. ステータスバー

右下のステータスバーには、カーソルを乗せた場所(または選択した行)の情報が出ます。

RANGE 0x0001f5–0x00025a 101B
#47 <3053308c306f57cb…> Tj
Tj  string  文字列を表示
文字: "これは埋め込まれていない日本語フォントの行です。"
行内容
1 行目その行・命令のバイト範囲と長さ
2 行目所属(オブジェクト番号とキーの経路、または命令の番号と中身)
3 行目演算子の意味と、被演算子の並び
4 行目文字を表示する命令のとき、フォントから復元した文字

15. キーボード

キー動作
Ctrl + K / ⌘ + K / /移動・検索パレット
1〜8タブの切り替え
Backspace / Alt + ←戻る
[ / ]前 / 次のページ(CONTENT・PAGE)
, / .ステップ実行で 1 命令戻る / 進む(PAGE)
< / >前 / 次の「何かを塗る命令」まで飛ぶ(PAGE)
L左パネルの表示を切り替え
?ヘルプ
Esc選択を解除 / ダイアログを閉じる

行の一覧をクリックしてフォーカスしているときは、次のキーも使えます。

キー動作
↑ ↓ PgUp PgDn選択行を移動(hex も追従)
Enter参照先・リソースを開く

入力欄にカーソルがあるときは、ショートカットは効きません。


注意事項

  • ファイルはブラウザの中だけで解析します。サーバーへの送信や保存は一切しません。
  • ページを閉じたり再読み込みしたりすると、読み込んだ内容は失われます。
  • このツールは、読んで調べるためのものです。PDF を書き換えたり、保存し直したりする機能はありません。
  • 次のものには対応していません。
    • JBIG2 と JPEG 2000 の画像(枠と警告を出します。JPEG 2000 は、ブラウザが読める場合は表示されます)
    • ICC プロファイルを使った正確な色の変換、オーバープリント(色は近似です)
    • 中国語・韓国語の、名前だけで指定された CMap で、埋め込みフォントを引くこと(Unicode に直して、システムフォントで描きます)
    • 電子署名の、証明書の信頼性の確認(発行元の連鎖、失効)
    • PDF/A・PDF/UA の正式な検証(簡易チェックのみ)
  • PAGE タブの描画は、PDF ビューアと細部が違うことがあります。埋め込まれていないフォントは、見ている PC のフォントで代用します。
  • 黒塗りの確認は、「上に図形を重ねただけ」のものが対象です。画像の中の文字(スキャンした書類など)は、命令ではなく画素なので、このツールでは分かりません。

よくある質問 (FAQ)

Q. 黒塗りの下が見えるのは、このツールが何かを解除しているのですか
A. 何も解除していません。上に四角を重ねただけの黒塗りは、文字のデータがファイルに残っています。このツールは、四角を描く手前で描画を止めているだけです。文字を全選択してコピーするだけでも、同じ文字が取り出せます。

Q. 自分の PDF の黒塗りが大丈夫か、確かめたい
A. PAGE タブで、黒塗りの上をクリックしてください。「この位置に重なっている命令」に、文字の命令(Tj / TJ)が出なければ、その場所に文字は残っていません。あわせて、REVISIONS タブでリビジョンが 1 個であること(古い版が残っていないこと)と、RESOURCES タブのメタデータ・添付に同じ情報がないことも確認してください。

Q. 正しく黒塗りするには、どうすればいいですか
A. 文字のデータそのものを削除する「墨消し」の機能を持つソフト(Acrobat Pro など)を使ってください。図形を重ねる方法では消えません。確実なのは、黒塗りした見た目を画像にしてから PDF に戻す方法です(文字の検索やコピーはできなくなります)。

Q. ページの文字が、ほかのビューアと違う書体で出ます
A. フォントが埋め込まれていない PDF です。その場合は、どのビューアも、手元のフォントで代用しています。PAGE タブの右の「フォント」に「埋め込みなし」と出ます。RESOURCES タブのフォントの一覧でも確認できます。

Q. 「署名は有効(信頼性は未確認)」とは、どういう意味ですか
A. 「署名の後に書き換えられていない」「その証明書の鍵で署名された」の 2 つを確かめた、という意味です。証明書が信頼できる発行元のものか・失効していないかは、確かめていません。本人の署名かどうかの判断には、Acrobat などで証明書の信頼性を確認してください。

Q. 「署名は有効・署名後に追記あり」と出ました。改ざんされていますか
A. それだけでは分かりません。署名の後に、フォームの入力や、別の人の署名が足されるのは、正常な使い方です。ただし、ページの見た目を変える追記もできてしまいます。REVISIONS タブで、署名の後のリビジョンで何が変わったかを見てください。

Q. DIAG に ERROR が出ているのに、ほかのビューアでは普通に開けます
A. 多くのビューアは、壊れた PDF を黙って修復して開きます。たとえば xref のオフセットがずれていると、ファイル全体を走査して作り直します。このツールは、修復した上で、どこが壊れていたかを表示します。

Q. パスワードを聞かれずに、暗号化された PDF が開けました
A. 「開くのは自由だが、印刷や編集を制限する」という設定の PDF です。この種の PDF は、開くためのパスワードが空なので、どのビューアでも中身を読めます。FILE INFO の Encrypted に方式が出ます。

Q. 文字をクリックしても、1 文字ではなく行全体が選ばれます
A. 命令の単位で選んでいます。PDF は、1 行や 1 単語を 1 つの命令(Tj / TJ)で描くことが多いので、その範囲が選ばれます。

Q. URL から読み込めません
A. 別のサイトのファイルは、そのサイトが CORS を許可していないと、ブラウザの制限で読み込めません。ファイルをダウンロードしてから、ドロップしてください。

技術記事

実装の詳細は、技術記事にまとめています。

更新履歴

バージョン日付内容
v1.0.02026/10/4初回公開(オブジェクト・描画命令・hex の連動、ステップ実行、増分更新の差分、診断、暗号化の解除、フォント・画像・電子署名の確認)

クレジット

本ツールは、外部ライブラリを使わずに作っています。

  • パーサー / 展開(Flate・LZW・CCITT など)/ 暗号(RC4・AES・MD5・SHA)/ 描画エンジン / フォントの解読 / 署名の読み取り / UI — 自作
  • 署名値の検証 — ブラウザの WebCrypto
  • JPEG の表示 — ブラウザのデコーダ

検証には次のツールを使いました(ページには含まれていません)。

  • qpdf — Apache License 2.0(構造の突き合わせ、暗号化 PDF の生成)
  • Poppler(pdftoppm) — GPL(描画の画素比較)
  • pikepdf — MPL 2.0
  • ReportLab / matplotlib / LibreOffice / LaTeX(TikZ)/ img2pdf — 検証用 PDF の生成

PDF の仕様は ISO 32000(PDF 1.7 / 2.0)、フォントは OpenType・CFF(Adobe Technical Note #5176 / #5177)・Type 1 の各仕様、ファクス圧縮は ITU-T T.4 / T.6、署名は RFC 5652(CMS)を参照しています。