[WEB Tool] PDF Inspector v1.0 — PDF 内部構造ビューア使い方ガイド
概要
PDF Inspector は、PDF ファイルの中身をブラウザだけで覗けるツールです。
中身を、オブジェクト(辞書・配列・ストリーム)、描画命令(ページを描く命令の列)、hex(生のバイト列)の 3 つの見方で同時に表示します。どこにカーソルを乗せても、他の見方の対応する場所が光ります。
ページは、このツール自身が描いています。そのため、描画を 1 命令ずつ進めたり、ページ上をクリックして「ここを塗ったのはどの命令か」を調べたりできます。上に黒い四角を重ねただけの黒塗りは、四角を描く手前で止めると、下の文字が見えます。
ほかに、追記(増分更新)の履歴と差分、壊れた PDF の診断、暗号化の解除、フォント・画像・電子署名の確認ができます。
パーサーも描画エンジンも自作で、外部ライブラリは使っていません。インストール不要で、ファイルはサーバーに送信されません。
PDF Inspector
PDF Inspector // PROTOCOL.LAIN
PDF の中身を覗く。オブジェクト・描画命令・hex の連動表示、ステップ実行、増分更新の差分、診断、フォント・画像・電子署名の確認まで。ブラウザ完結。
lain-lab.comスタートメニューから起動
トップページのスタートメニューからも起動できます。
スクリーンショット
PDF Inspector — RESOURCES(フォント・画像・メタデータ)
PDF Inspector — PAGE(黒塗りされた状態)
PDF Inspector — PAGE(スライダーを戻すと、下の文字が見える)
PDF Inspector — REVISIONS(追記の差分)
操作動画
ツールの特徴
- ブラウザ完結: インストール不要。ファイルはブラウザの中だけで解析し、サーバーには送信しません。
- 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 が何でできているか」が分かります。
- 左の「▶ SAMPLE PDF」を押します
- 上の
PAGEタブを押します。金額の行が、黒い帯で隠れています - 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 | 操作方法のヘルプを開きます |
| ◧ | 左パネルの表示 / 非表示 |
移動・検索パレットには、次の書き方ができます。
| 入力 | 移動先 |
|---|---|
12 | 12 番のオブジェクト |
p3 | 3 ページ目 |
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 タブ
診断の一覧です。ファイルを開くと、全オブジェクトを読んで、全ストリームを展開して、問題を集めます。
| 種類 | 例 |
|---|---|
| ERROR | xref のオフセットのずれ、/Length の誤り、展開できないストリーム、読めないオブジェクト |
| WARN | endobj がない、/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 を許可していないと、ブラウザの制限で読み込めません。ファイルをダウンロードしてから、ドロップしてください。
技術記事
実装の詳細は、技術記事にまとめています。
[Astro] #162 PDF Inspector — PDFの中身を覗くツールを作成
バイト範囲を持つパーサ、xref の読み取りと全体走査の突き合わせ、描画エンジン、ステップ実行とクリックからの逆引き、フォントの輪郭の解読、日本語 CMap の CID を計算で求める方法、電子署名の検証、poppler との画素比較まで。
lain-lab.com更新履歴
| バージョン | 日付 | 内容 |
|---|---|---|
| v1.0.0 | 2026/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)を参照しています。
GitHub - qpdf/qpdf: qpdf: A content-preserving PDF document transformer
qpdf: A content-preserving PDF document transformer
github.com