スキャンしたPDFを開くと正しい向きで表示されるのに、別のアプリで開いたら横倒しになっていた。あるいは、ビューアで回転させて保存したはずなのに、送った相手のところでは元の向きに戻っていた。この種の食い違いは、PDFが「ページの中身」と「表示するときに何度回すか」を別々に持っていることから生まれます。
PDF正規化は、この分離を解消するツールです。ページに付いている回転の指示を、ページの中身そのものに焼き込み、指示自体は消します。結果として、どのアプリで開いても、どう処理しても、見た目どおりの向きが実体になります。処理はすべてブラウザ内で完結します。
回転情報という仕組みと、そこから起きる問題
見た目の向きと、実体の向きが違う
PDFの各ページは、内容とは別に「表示するとき90度回してください」といった指示を持つことができます。スキャナーが用紙の向きを検知して付けたり、ビューアで回転して保存したときに付いたりするものです。ビューアはこの指示に従って回してから表示するので、画面上は正しく見えます。
問題は、この指示を読まない処理や、読み方が違う処理に渡したときに現れます。ページの中身自体は回っていないので、指示を無視すればそのまま横倒しで扱われます。同じPDFがアプリによって違う向きで表示される、という現象の正体はこれです。
編集ツールで座標がずれる
実害が最も分かりやすく出るのは、ページの上に何かを描く操作です。黒塗りやスタンプを置くとき、画面に表示されている位置と、PDFの内部座標系での位置が回転のぶんだけずれます。塗ったはずの場所と実際に塗られる場所が食い違う、という形で現れます。
正規化を通しておくと、画面上の位置と内部の座標が一致するため、この種のずれが起きなくなります。マークアップの前処理として使うのが、このツールの最も実用的な用途です。
内部で何をしているか
変換行列を先頭に差し込んで、回転を中身に埋め込む
ページの描画命令の先頭に、回転と同じ効果を持つ変換行列を1つ差し込みます。90度なら90度ぶん、180度なら180度ぶん、座標系そのものを回す指示です。既存の描画命令はこの変換の内側に入るよう、状態の保存と復元で挟み込みます。そのうえでページの寸法を回転後の縦横に更新し、最後に回転の指示を0に戻します。
つまり「回してから表示してください」という外付けの注釈を、「最初から回った状態で描く」という中身に置き換えているわけです。表示結果は変わらないまま、指示に依存しなくなります。
画像化しないので、中身は一切劣化しない
この方式の要点は、ページを画像に描き直していないことです。文字は文字のまま、図形は図形のまま、埋め込まれた画像は元の画像のまま残ります。したがってテキストは選択も検索もでき、拡大しても輪郭が崩れません。埋め込みフォントもそのままです。
ファイルサイズへの影響もほぼありません。追加されるのは変換行列と状態の保存・復元だけなので、1ページあたり数十バイト程度です。「向きを直したらファイルが数倍に膨らんだ」「文字が選べなくなった」という、ページを画像化する方式の副作用はここでは起きません。
回転の指示が付いているページだけが対象になり、もともと0度のページには何もしません。処理後は、何ページを正規化して何ページをそのままにしたかが表示されます。
テキストの有無に関係なく処理できる
以前はページを画像として描き直す方式だったため、テキストを含むページは劣化を避けるために対象から外す必要がありました。現在の実装は構造を直接操作するので、その制限はありません。テキストが多いページでも、図版だけのページでも、90度・180度・270度のいずれでも同じように処理できます。
できること・できないこと
向きを変えるツールではない
正規化は見た目の向きを変えません。今そう見えている状態を、そのまま実体にする処理です。横倒しに見えているPDFを正しい向きにしたい場合は、まずページ整理で回転させてから正規化するか、あるいは回転させた結果を保存すれば足ります。
つまりこのツールが解決するのは「向きが正しくない」問題ではなく、「向きが正しく見えているのに、他の処理でそうならない」問題です。この区別が付いていないと、期待した結果になりません。
対象は90度単位の回転指示
扱うのはPDFの仕様で定められた90度・180度・270度の回転指示です。0度のページや、規格外の値が入ったページには何もしません。また、ページの中身が最初から斜めにスキャンされている場合、それは回転指示ではなく画像そのものの傾きなので、このツールの対象外です。
1ファイルあたり100MBまでを想定しています。ページ数が多いPDFでも、画像化を伴わないため処理は比較的短時間で終わります。
いつ通しておくか
仕様と制限
- 対応形式
- PDF(application/pdf)
- サイズ上限
- 1ファイルあたり100MB
- 対象
- 90度・180度・270度の回転指示を持つページのみ
- 処理方式
- 変換行列を描画命令に差し込み、回転指示を0に戻す
- 画質
- 画像化しない。文字・図形・埋め込み画像は無変更
- テキスト
- 選択・検索できる状態のまま維持
- サイズ変化
- 1ページあたり数十バイト程度の増加
- 見た目
- 変わらない(向きを変えるツールではない)
- 処理結果
- 正規化したページ数とスキップしたページ数を表示
- 通信
- ファイルの送信なし。処理はすべてブラウザ内