トラスト・ソフトウェア・システム
ホーム > PDF Tools トップ > PDF Tools ライト > PDF 構文

PDF構文 (PDF Syntax ISO 32000-1)

PDF1.7は、ISO技術委員会によって2008年1月に“ISO 32000-1規格”として承認されました。
ここでは、その規格で説明されているPDFの構文(構造)について説明しています。 PDFファイルは、8-bitデータを単位として構成されていて一般の文書編集アプリケーションで開くことができ、その内容を読取ることができます。ただし、バイナリのデータもそのまま(表示可能な文字に変換されずに)格納されていますので文字化けしているように表示されますが、これはPDFの仕様です。
ここでは、そのデータの一部を読み解くことで、PDF文書へのデータ追加など、PDF再構成の意味を説明し、PDF-ToolsでのPDFデータ解析や編集をより詳細にできるようにします。

クロスリファレンス ストリーム」へ <<< >>>「インタラクティブ フォーム」へ


9.各種ディクショナリー (Dictionary)

PDF構造

PDFでは、数多くのディクショナリが定義されています。各ディクショナリは、右図のようにPDFを構成する要素でもあります。
ここでは、ディクショナリをまとめて説明します。



9.1 ストリーム オブジェクト (Stream Object)

dictionaryタイプのインダイレクト・オブジェクトにはストリーム(Stream)を付加できます。このストリームが付加されたオブジェクトを、ストリーム オブジェクトといいます。
ストリームには、大きなサイズのバイトデータ(画像データや描画用のデータ)を格納できます。多くの場合、このバイトデータは圧縮されています。
ストリームは、ディクショナリ オブジェクトでなければならず、そのディクショナリ オブジェクトはLength項目を含まなければなりません。この項目は、ストリームのバイトサイズ(データが圧縮されている場合は、圧縮されたデータのバイト数)を表します。
以下は、ストリーム オブジェクトの例です。

3 0 obj
%lt;< /Filter /FlateDecode /Length 72 >>
stream
... 72バイトのデータ...
endstream
endobj

このオブジェクトは、72バイトのストリーム データを含み、そのデータはFlateDecodeで圧縮されていることがDictionaryに示されています。


ストリーム(Strem) オブジェクト ディレクトリの項目
ストリーム(Strem) オブジェクトのディクショナリには、以下の項目が追加されます。

キータイプ
Lengthinteger(必須)ストリーム(Stream)に記載されたデータのバイト数
Filtername /
array
(オプション)ストリーム データが圧縮された場合のフィルター名
複数フィルターの場合はarrayで記載
DecodeParmsdictionary /
array
(オプション9フィルターのパラメータを指定

オブジェクトのタイプは「2.5オブジェクト」を参照してください。


9.2 文書情報(Document Information)ディクショナリー

文書情報(Document Information)ディクショナリーは、トレイラーのInfo項目にその参照先が記されています。

このディクショナリーは、PDF文書のメタデータのひとつで、以下の情報が含まれます。

キータイプ
Titletext string文書のタイトル
Authortext string文書を作成した人の名前
Subjecttext string文書のサブジェクト
Keywordtext string文書に関するキーワード
Creator text stringPDF以外の形式から変換した場合に、そのオリジナルの作成ツール
Producertext stringPDF以外の形式から変換した場合に、その変換ツール
CreateDate日付文書が生成された日時(人が読める形式)
ModDate日付文書が更新された最終の日時
Trappedname文書がトラッピング情報を含むように変更されたかどうかを示す
名前オブジェクト

オブジェクトのタイプは「2.5オブジェクト」を参照してください。


文書情報ディクショナリの例を以下に記します。

1 0 obj
<< /Title (PDF Easy Parse Reference)
/Author (Trust Software System)
/Creator (PDF Easy Parse)
/Producer (Trust Software System, PDF Easy Parse)
/CreationDate (D:20140215010203+09'00')
/ModDate (D:20140216040506+09'00')
>>
endobj

9.3 カタログ(Catalog) ディクショナリ

カタログ(Catalog)ディクショナリは、PDF文書のオブジェクト階層のルート(最上位)です。カタログ ディクショナリは、トレイラーRoot項目に記載されます。

カタログ(Catrog)ディクショナリには以下の項目が記載されます。

キータイプ
Typename(必須)"Catalog"を指定
Versionname(オプション)PDFファイルのヘッダー(Header)に記載されたバージョンより古い場合は、無視されます。PDF文書が更新され更新前のバージョンより新しくなった場合は、ここで指定されます。
Pagesdictionary(必須)ページ・ツリー(Page Tree)
PageLayoutname(オプション)文書を表示したときのレイアウトを指定
以下の値で指定します。
SinglePage1ページを表示
OneColumn1っのカラムでページを表示
TwoColumnLeft2っのカラムでページを表示、奇数ページが左カラム
TwoColumnRight2っのカラムでページを表示、奇数ページが右カラム
TwoPageLeft2ページを同時に表示、奇数ページが左側
TwoPageRight2ページを同時に表示、奇数ページが右側
既定値は、SinglePageです。
PageModename(オプション)文書を表示した時の全体構成を指定
以下の値で指定します。
UseNoneしおり、サムネール画像を非表示
UseOutlinesしおりを表示
UseThumbsサムネール画像を表示
FullScreenフルスクリーン・モード表示
UseOCオプショナル コントロール パネル表示
UseAttachementsアタッチメント パネル表示
既定値は、UseNoneです。
Outlinesdictionary(オプション)アウトライン(Outlines)のルートへの参照を指定
アウトラインは、文書の概要を階層で示した情報です。
Threadsarray(オプション)Articlesノード オブジェクトへの参照
OpenActionarray /
dictionary
(オプション)文書を開くときの動作を指定します。
arrayの場合はDestinationsを表し、dictionaryの場合はActionsを表します。
AcroFormdictionary(オプション)Interactive Form Dictionary(入力フォーム)を指定
Metadatastreams(オプション)Metadata Streamsを表すインダイレクトオブジェクトへの参照

オブジェクトのタイプは「2.5オブジェクト」を参照してください。


以下は、カタログ ディクショナリの例です。HelloWorld.pdfデータのオブジェクト番号7がカタログ ディクショナリです。

7 0 obj
<<
  /Type /Catalog
  /Pages 5 0 R
>>

9.4 ページ・ツリー(PageTree) ディクショナリー

ページ・ツリー(PageTree)は、PDFのリーダーがその文書を順番どおりにアクセスするための情報です。カタログ ディクショナリのPages項目から参照されます。

ページ・ツリー ディクショナリには以下の項目が含まれます。

キータイプ
Typename(必須)"Pages"を指定
Parentdictionary(必須)親オブジェクトへの参照
Kidsarray(必須)子ノード オブジェクトへの参照
子ノードは、ページ(Page)または、ページ・ツリー(Page Tree)オブジェクトです。
Countinteger(必須)このPage Treeの子孫であるPageの数

オブジェクトのタイプは「2.5オブジェクト」を参照してください。


以下は、PageTreeディクショナリの例です。

2 0 obj
  << /Type /Pages
    /Kids [ 4 0 R
            10 0 R
          ]
    /Count 2
  >>
endobj

4 0 obj
  << /Type /Page
    ・・・このページの属性を記述する追加の項目・・・
  >>
endobj

10 0 obj
  << /Type /Page
    ・・・このページの属性を記述する追加の項目・・・
  >>
endobj

9.5 Page ディクショナリー

ページ ツリーの枝葉に当たる部分がページ(Page) オブジェクトです。それぞれのページオブジェクトは、PDF文書内の単一ページの属性を指定します。

ページ ディクショナリには以下の項目が含まれます。

キータイプ
Typename(必須)"Page"を指定
Parentdictionary(必須)直接の親オブジェクト
MediaBox四角形(必須)表示または印刷される際のページのサイズ
Rotateinteger(オプション)表示または印刷される際のページの回転角度
回転は時計方向とします。角度は、90の倍数でなければなりません。既定値は、0です。
Thumbstream(オプション)このページのサムネール画像のストリーム オブジェクトを指定
Annotsarray(オプション)このページに関連するアノテーションを指定

オブジェクトのタイプは「2.5オブジェクト」を参照してください。


以下は、ページ(Page) ディクショナリの例です。

3 0 obj
  << /Type /Page
    /Parent 4 0 R
    /MediaBox [ 0 0 612 792 ]
    /Resources << /Font << /F3 7 0 R
                           /F5 9 0 R
                           /F7 11 0 R
                        >>
                  /ProcSet [ /PDF ]
               >>
    /Contents 12 0 R
    /Thumb 14 0 R
    /Annots [ 23 0 R
              24 0 R
            ]
  >>
endobj

9.6 Thread ディクショナリー

Thread ディクショナリーは、一般的な記事(ニュース)のように、物理的には順番が無いけれども論理的にはそれらに関連があるような項目をまとめるためのディクショナリです。Threadsは記事を表し、その記事に関連した参照をBeadチェーンで順に表します。
Threadディクショナリーは、カタログ ディクショナリのThreads項目から参照されます。

Thread ディクショナリーには以下の項目が含まれます。

キータイプ
Typename(オプション)"Thread"を指定
Fdictionary(必須)threadの最初のbeadオブジェクトへの参照
Idictionary(オプション)threadの情報を表すディクショナリ

オブジェクトのタイプは「2.5オブジェクト」を参照してください


9.7 Bead ディクショナリー

Bead ディクショナリーは、Thread ディクショナリーから参照され、Thread(記事)に関連した参照を順に表すものです。

キータイプ
Typename(オプション)"Bead"を指定
Tdictionary(threadの最初のbeadの場合に必須;それ以外はオプション)このbeadが所属するthread
Ndictionary(必須)次のbeadへの参照
Vdictionary(必須)直前のbeadへの参照
Pdictionary(必須)このbeadが含まれているpageへの参照
Rrectangle(必須)このbeadのpage上の領域(rectangle)

オブジェクトのタイプは「2.5オブジェクト」を参照してください


クロスリファレンス ストリーム」へ <<< >>>「インタラクティブ フォーム」へ


ご質問、お問い合わせ

メールで support@TrustSS.co.jp 宛てにお送りください。
または、質問のページからお送りいただくようお願いします。ご要望も承っております。(匿名で送れます。)




スリーソフト作者の方へ

PDF Easy Parseライブラリを無償で利用できるプログラムがあります。
こちらを参照してください。