fbpx

PDFファイルに画像はどのように格納されていますか?

マークは1999年からJavaとPDFに携わっており、NetBeansの大ファンです。カンファレンスでの講演が趣味です。今回は、PDFファイルに表示される画像はどのように格納されているのかを説明します。例えばMicrosoft WordでPNGやJPEGの画像を配置して、PDFファイルに書き出したときどのように画像ファイルは処理されているのでしょうか?
開発者ブログイメージ

著者 Mark Stephens (IDRsolutions)  翻訳/編集 インターワーク

私がPDFファイル形式を学んでいたとき、PDFでは画像が非常に複雑なトピックであることが分かりました。そこで今回は、PDFファイルにおける画像の扱いについて、わかりやすく解説していきたいと思います。改善するための提案や、疑問点があればお知らせください。

ラスター画像とベクター画像

画像にはラスター画像とベクター画像の2種類があります。ラスター画像はピクセルの集まりで、解像度に依存し、拡大するとピクセルが見えます。JPEG、PNG、BMPなどが一般的です。ベクター画像は線や形状を数式で表現し、解像度に依存せず、拡大しても画質が劣化しません。SVGやAIなどが一般的で、どのサイズにもスケーリング可能です。PDFファイルにはこの両方のタイプの画像を含むことができます。

PDFにおけるラスター画像の保存形式

PDFファイルは通常、画像を別のオブジェクト(XObject)として格納し、そのオブジェクトには画像の生のバイナリデータが含まれています。これらはすべて、ページまたはファイルのリソースオブジェクトにリストされ、それぞれに名前があります(Im1など)。PDFの中に埋め込まれた画像を、Tif、Gif、Bmp、Jpeg、Pngと考えるのは間違いです。そうではありません。

PDFに格納されている画像は通常、一般的な画像フォーマット(例えばTif、Jpg、Pngなど)として保存されるわけではなく、ピクセルのバイナリデータや色空間情報など、画像に関するさまざまな情報を含むオブジェクトとして保存されます。これにより、同じ画像が異なるPDF作成ツールによって異なる方法で保存されることがあります。

PDFオブジェクトビューアの例

以下は、AcrobatのPDFオブジェクトビューアに表示された例です。
 

※上記の画像は、表紙のメイン画像の部分、Adobe Acrobatのツールから、プリフライト→オプション→PDFの内部構造→Logical Structureで閲覧出来ます。

生の画像データがページに必要なサイズに調整されることもあれば、そうでないこともあります。その場合は、描画時に拡大または縮小されます。PDF作成ツールによって、PDFファイルの作成方法はまったく異なります。

圧縮とフォーマット

実際のピクセルデータは圧縮することができ、圧縮フォーマットの一つ(DCTDecode)はJPEGで使用されているものと同じです(JPXはJPEG2000と同じです)。このデータを保存した場合、JPEGファイルとして開くことができますが、色空間データを含むように変更する必要があるかもしれません。

画像の描画と操作

画像は、PDFコンテンツストリーム内でDOコマンドと画像名(Im1など)によって描画されます。この画像は複数回使用することができ、拡大縮小、回転、切り抜きなど、DOコマンド実行時に設定された値を取ることができます。目には画像に見えるものでも、複数の画像で構成されていたり、画像ですらなかったりすることがあります!

画像の抽出について

つまり、PDFからこれらのラスター画像を取り出したい場合、すべての生データから画像を組み立てる必要があるのです。また、画像の「生」(より高画質で、まったく同じサイズであることもあります)バージョンと、切り抜き/拡大縮小されたバージョンがあり、どちらも抽出することができます(さらに、クリップを生に拡大縮小して、より高画質な画像を作成することもできます - JPedalでは、これを利用してPDF切り抜き画像抽出を提供しています)。

PDFにおけるベクター画像の保存形式

PDFにおけるベクター画像は、数式や描画命令で形状を定義するパス、塗りつぶしやストロークのプロパティ、テキストオブジェクトなどとして保存されます。これにより、解像度に依存せず、どのサイズにもスケーリング可能な高品質なグラフィックが実現されます。

具体的には、以下のような方法で保存されます:

パス、塗りつぶしやストローク

パス(Path): 線や図形はパスとして保存され、描画命令で定義されます。例えば、moveto(開始点の設定)、lineto(直線の描画)、curveto(曲線の描画)などの命令が使用されます。これらの命令は、PostScript言語に基づいており、ベクター画像の基本要素です。

				
					/Path
100 100 moveto
200 200 lineto
150 250 curveto

				
			

塗りつぶしとストローク: パスの内部を塗りつぶすための色やパターン、境界線を描くためのストロークプロパティも保存されます。これには色の指定(RGBやCMYK)、グラデーション、パターンなどが含まれます。

				
					/ColorSpace /DeviceRGB
/Color [1.0 0.0 0.0] % 赤色
/Pattern /ShadingType2 % グラデーション

				
			

テキスト

テキストオブジェクト: テキストは別のオブジェクトとして保存され、フォント、サイズ、位置、スタイルなどの情報が含まれます。PDF内のテキストはベクター形式で描画されるため、拡大しても画質が劣化しません。

				
					BT % テキストオブジェクトの開始
/F1 12 Tf % フォントとサイズの設定
100 100 Td % 位置の設定
(Hello, World!) Tj % テキストの描画
ET % テキストオブジェクトの終了

				
			

これらの要素により、PDFは解像度に依存しない高品質なグラフィックを提供します。線や図とテキストは異なるオブジェクトとして保存され、PDFビューアやエディタではそれぞれを独立して操作できます。例えば、テキストを選択してコピーしたり、パスの色を変更したりすることが可能です。

画像の抽出について

PDFからベクター画像を抽出するには、描画命令や数式に基づいたデータを再構成する必要があります。ベクター画像は、パス、描画命令、塗りつぶしやストロークのプロパティ、テキストオブジェクトなどの形で保存されています。Adobe IllustratorPixelmator Proなどのツールを使用してPDFファイルを開き、抽出したい画像部分(図や表など)を視覚的に選択することで、高品質なベクター画像を抽出・編集・保存することが可能です。

より詳しく知りたい方は、ぜひ「PDFってこうなってる? 実践でPDFの内部構造を学ぼう」の記事をご覧下さい。特に、ベクター画像については「PDFってこうなってる? 実践でPDFの内部構造を学ぼう Part 6:パスで図形を描こう」で解説しています。

JavaアプリでのPDFラスタライズが必要になったとき、JPedalの高機能なPDFビューアが効率のよい開発にきっとお役に立つことと思います。

JavaScript環境でのPDFラスタライズなら、PDF→HTML5/SVG変換でドキュメント表示するBuildVuをご検討ください。

JPedal、BuildVuともに無料で試用していただけます。ビューア機能や表示スピード、UIなどを、まずはご自身で実際にお試しのうえ、ぜひ導入をご検討ください。

    Facebook
    Twitter
    Email
    公式ブログロゴ

    製品に関する記事や開発者のブログ

    PDFを「見せたい」なら、HTMLへの変換が大事!

    ビジネスの現場で、顧客やパートナーに「見せたい」PDF資料があることは多いでしょう。営業資料、研究結果、提案資料、調査レポートなど、PDFは一貫した見た目で情報を伝えるのに優れています。しかし、PDFには閲覧環境やデバイスによって使いにくさを感じることもあります。例えば、混み合った通勤電車の中で見込み客がスマートフォンで資料を確認しようとしても、PDFでは快適に閲覧できないかもしれません。そんなときに役立つのが、BuildVuを活用したPDFからHTMLへの変換です。

    タグ付きPDF入門:試して分かった!AI活用とアクセシビリティ

    タグ付きPDFの仕様が策定されてから20年以上が経過しましたが、この構造化技術はあまり注目されることなく時が過ぎてきました。しかし、AI時代の到来により状況は一変しています。ChatGPTなどのAIによる文書理解において、タグ付きPDFはタグなしのPDFと比較して、驚くほど正確な解析を実現できることが明らかになってきました。アクセシビリティから文書解析、HTMLへの変換まで—長年活用されていなかったタグ付きPDFが、AI時代の文書活用に新たな可能性をもたらす具体的なメリットを、実例とともに細かく解説していきます。

    PDF用語集

    この記事ではPDF関連の一般的な用語を網羅し、それぞれの定義を解説します。

    PDFファイルを扱うシステム開発・ウェブ開発に役立つ

    開発者向けPDF入門ガイド

    開発者向けPDF入門ガイド

    PDFの基礎から応用まで開発者のための入門ガイド2024年版

    PDF の仕様や活用方法など、開発者に必要な情報がコンパクトにまとめました。初めてPDFを扱う開発者にも分かりやすく、基礎から応用までカバーしているため、PDF のポテンシャルを最大限に引き出し、アプリケーション開発やドキュメント管理の効率化を図るための手引きとなるでしょう。技術的な側面に興味がある開発者だけでなく、ビジネスでPDFを有効活用したい方にもおすすめの一冊です。

    MENU
    PAGE TOP