PDF 構文 メタデータ

PDF構文  [PDF Syntax ISO 32000-2]

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

8. メタデータ (Metadata)

PDF文書の一般的な情報としてメタデータを格納できます。メタデータには例えば、タイトル、作成者、作成および変更の日時などが記載されます。
PDF文書に関するこのような情報はドキュメントメタデータと呼ばれ、オブジェクトレベルのメタデータでメタデータ(Metadata)ストリームとして格納されます。これはPDF2.0で推奨された方法です。
他に、このような情報を文書情報(Document Information) ディクショナリに格納する方法もありますが、CreationDateおよびModDateエントリを除いてPDF2.0では非推奨になりました。

PDF文書に関連した情報はカタログディクショナリMetadeta要素にあります。
メタデータストリームがPDF1.4で使用開始されたとき、メタデータエントリを表すための豊富なメカニズムを提供するXMPが導入されました。
XMPはISO16684-1規格に準拠したXMLデータです。
PDF2.0ではメタデータを表す文法をISO16684-1規格に従うものと規定されました。

XMPを使用するとドキュメントのタイトルを複数の言語にすることも、ドキュメントの作成者をリストとして表すこともできます。

メタデータはPDF文書を補足する情報ですので、文書の表示には影響を与えません。
一般的にメタデータはPDF文書のカタログ化や検索などに利用されます。
メタデータの変更は容易ですし、削除することもできます。

8.1 メタデータ(Metadata)ストリーム

メタデータはストリーム(Stream)に記載できます。このストリームを「メタデータ ストリーム」といいます。
ストリームを持ったオブジェクトですのでこのオブジェクトのタイプは「ディクショナリ」です。メタデータ ストリームは通常のストリーム ディクショナリに加えて以下のエントリが追加されます。

キー
タイプ
Type
name
(必須)"Metadata"を指定    
Subtype
name
(必須)"XML"

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

ドキュメントレベルのメタデータを表すメタデータストリームは、カタログディクショナリMetadata要素を介してPDF文書に添付できます。
このメタデータストリームはXML(Extensible Markup Language)で表されるメタデータであり、文書情報辞書(Document Informationディクショナリ)にも記載できますが、「メタデータを表すXMLの文法はXMP(Extensible Metadata Platform)仕様(ISO 16684-1)に従って定義されるものとする」とPDF2.0でより明確に指定されました。XMPの要素は「8.3名前空間プロパティ」を参照してください。

以下は、メタデータの例です。

<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 6.0.0">
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about=""
            xmlns:dc="http://purl.org/dc/elements/1.1/"
            xmlns:xmpRights="http://ns.adobe.com/xap/1.0/rights/"
            xmlns:xmp="http://ns.adobe.com/xap/1.0/"
            xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
         <dc:format>application/pdf</dc:format>
         <dc:creator>
            <rdf:Seq>
               <rdf:li>作成者</rdf:li>
            </rdf:Seq>
         </dc:creator>
         <dc:title>
            <rdf:Alt>
               <rdf:li xml:lang="x-default">文書タイトル</rdf:li>
            </rdf:Alt>
         </dc:title>
         <dc:rights>
            <rdf:Alt>
               <rdf:li xml:lang="x-default">Copyright 2014-2026 株式会社トラスト・ソフトウェア・システム</rdf:li>
            </rdf:Alt>
         </dc:rights>
         <xmpRights:WebStatement>https//www.trustss.co.jp/</xmpRights:WebStatement>
         <xmpRights:Marked>False</xmpRights:Marked>
         <xmp:CreateDate>2026-01-16T00:00:00+09:00</xmp:CreateDate>
         <xmp:MetadataDate>2026-01-16T00:00:00+09:00</xmp:MetadataDate>
         <xmp:ModifyDate>2026-01-16T00:00:00+09:00</xmp:ModifyDate>
         <xmp:CreatorTool>PDF Structure Library (https://www.trustss.co.jp/)</xmp:CreatorTool>
         <pdf:Producer>PDF Structure Library Ver 1.10.2 (https://www.trustss.co.jp/)</pdf:Producer>
      </rdf:Description>
   </rdf:RDF>
</x:xmpmeta>

PDF Imager-LP無償版)でHelloWorld.pdfの「メタデータ」を表示するソースコード
このPDFの内容はHelloWorld.txtです。

C# C/C++
全体のソースコード

HelloWorld.pdfのメタデータをXMPとしてImager-LPで解析すると、以下のようになります。

dc:  http://purl.org/dc/elements/1.1/
    dc:format = "application/pdf"
    dc:creator [rdf:Seq]
        [1] = ""
    dc:title [rdf:Alt]
        [1] = ""

pdf:  http://ns.adobe.com/pdf/1.3/
    pdf:Producer = "Acrobat Distiller 10.1.3 (Windows)"

xmp:  http://ns.adobe.com/xap/1.0/
    xmp:CreatorTool = "Word 用 Acrobat PDFMaker 10.1"
    xmp:ModifyDate = "2026-01-16T11:38:22+09:00"
    xmp:CreateDate = "2026-01-16T11:38:15+09:00"
    xmp:MetadataDate = "2026-01-16T11:38:22+09:00"

xmpMM:  http://ns.adobe.com/xap/1.0/mm/
    xmpMM:DocumentID = "uuid:352e51c6-c5a1-4710-bfd6-92ecdfa8db59"
    xmpMM:InstanceID = "uuid:0f64c2dd-f790-4217-9469-25b37bc83bf6"

HelloWorld.pdfを解析するPDF Imager-LP無償版)のソースコード

C# C/C++
全体のソースコード

8.2 XMP(Extensible Metadata Platform)

XMPパケットラッパ

PDF文書に関するドキュメントメタデータを記載する場合は、多くの場合で、以下のようにrdf:RDF要素をXMPパケットラッパで囲みます。
このラッパはXML processing instructions(PIs)で以下のように記述されます。

<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      ...
   </rdf:RDF>
   ... パディング用の空白文字 ...
<?xpacket end="w"?>

begin要素のにはバイトオーダーマーク(BOM)が入ります。
XMPデータはUnicodeテキスト(UTF-8、UTF-16、UTF-32エンコード)で記載されることが求められています。
PDF文書はバイトデータで記載されていますのでUTF-8エンコードとなり、バイトオーダーマークは0xEFBBBFです。

XMPパケットに空白文字を追加することは有意義であるとXMP規格にあります。
空白文字(U+0020)は見た目に優しくするため100バイトごとに改行文字(U+000A)を追加します。
パディングには空白文字を2000バイト程度記述しておきます。
これによって、少々の変更であれば、PDF文書(の全体サイズ)を変更することなくメタデータだけを変更できます。

x:xmpmeta要素

以下のように、rdf:RDF要素の外側にx:xmpmeta要素が配置される場合があります。
この場合、x:xmpmeta要素には名前空間属性"adobe:ns:meta/"を指定し、この属性だけが有効な属性となり、他の属性は読み取り時に無視されます。
x:xmpmetaの目的は、一般的なXMLテキスト(非XMP)が含まれたXMPメタデータを識別することです。

<x:xmpmeta xmlns:x="adobe:ns:meta/">
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      ...
   </rdf:RDF>
</x:xmpmeta>

rdf:RDF、rdf:Description要素

単一のXMPパケットは、単一のrdf:RDF要素によってシリアル化されます。
rdf:RDF要素の内容は0個以上のrdf:Description要素によって構成されます。

最上位のrdf:Description要素の内容は0個以上のXMPプロパティのためのXML要素によって構成されます。
XMPプロパティは任意のrdf:Description要素に配置できます。
XMP規格では以下のいずれかを推奨しています。

・単一のrdf:Description要素に全てのプロパティを記述する
・各プロパティを個別のrdf:Description要素に記述する

最上位rdf:Description要素にはXMPデータモデルにあるAboutURLを値としたrdf:about属性を指定できます。
rdf:about属性値は全ての最上位rdf:Description要素で同一でなければなりませんが、空の値を持つrdf:about属性がある場合にそれ同値のrdf:about属性とすることができます。
このAboutURLが無い場合はrdf:about属性値を空にしなければなりません。
最上位より深くネストされたrdf:Description要素にはrdf:about属性を使えません。

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:xmp="http://ns.adobe.com/xap/1.0/">
   <rdf:Description rdf:about="">
      <xmp:Rating>3</xmp:Rating>
   </rdf:Description>
</rdf:RDF>

XMPプロパティ要素はシリアル化されるXMP値の形式(Simple、Structure、またはArray)、およびXMP値にqualifier(修飾子)があるかどうかによって決定されます。

Simple(単純)値 XMPプロパティ

Simple(単純)値は Unicode標準で定義されているUnicodeテキストの文字列です。
Simple値を持つXMPプロパティの要素コンテンツは値を提供するテキストでなければなりません。
テキストには文字データ、エンティティ参照、文字参照、およびCDATAセクションのみを含めることができます。
要素にはネストされたXML要素を含めることはできません。

上記のXMPを解析するPDF Imager-LP無償版)のソースコード

C# C/C++
全体のソースコード

Structure(構造)値 XMPプロパティ

Structure(構造)値は0個以上の名前付きフィールドのコンテナーです。
構造内の各フィールドの順序は重要ではありません。
Structure値を持つXMPプロパティの要素コンテンツはネストされたrdf:Description要素でなければなりません。
ネストされたrdf:Description要素の内容は名前がXMP構造のフィールドの名前である0個以上のXML要素で構成されます。

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
         xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#">
   <rdf:Description rdf:about="">
      <xmpTPg:MaxPageSize>
         <rdf:Description>
            <stDim:h>297</stDim:h>
            <stDim:w>210</stDim:w>
            <stDim:unit>mm</stDim:unit>
         </rdf:Description>
      </xmpTPg:MaxPageSize>
   </rdf:Description>
</rdf:RDF>

上のXMPを解析するPDF Imager-LP無償版)のソースコード

C# C/C++
全体のソースコード

Array(配列)値 XMPプロパティ

Array(配列)値は1から始まる序数で位置付けされた0個以上のアイテムのコンテナです。
Arrayアイテムの形式は任意のXMP値形式にすることができ、配列内のすべてのアイテムは同じデータ型にします。
Arrayには以下の三種類があります。

Ordered(順序付き)
順序付き配列内の項目は、インデックスによって順序付けられます。
順序付き配列内の項目は、任意に順序を変更してはなりません。順序の意味は、データ型またはアプリケーションによって定義されます。
Unordered(順序なし)
順序付けされていない配列は、その中の項目の順序に意味や制約を持ちません。
順序付けされていない配列内の項目はいつでも並べ替えることができます。
Alternative(代替)
代替配列内の項目は順序付けされており、恣意的に順序を変更してはなりません。
順序の意味はデータ型またはアプリケーションによって定義できます。
ある項目が優先されるべき既定値である場合はその項目が配列の最初の項目でなければなりません。
配列の最初の項目は他の基準が適用されない場合に選択される必要があります。

Array値を持つXMPプロパティの要素コンテンツはネストされたいかの要素1つで構成されます。

rdf:Bag 順序付けされていない配列
rdf:Seq 順序付けされた配列
rdf:Alt 代替配列

ネストされた要素の要素コンテンツは配列内の各項目に1つずつ、0個以上のrdf:li要素で構成されます。


<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:dc="http://purl.org/dc/elements/1.1/">
   <rdf:Description rdf:about="">
      <dc:subject>
         <rdf:Bag>
            <rdf:li>XMP</rdf:li>
            <rdf:li>metadata</rdf:li>
            <rdf:li>ISO Standard</rdf:li>
         </rdf:Bag>
      </dc:subject>
   </rdf:Description>
</rdf:RDF>

上のXMPを解析するPDF Imager-LP無償版)のソースコード

C# C/C++
全体のソースコード

8.3 XMP Qualifier(修飾子)

XMP修飾子は、任意のXMP値に、その値の形式を変更することなく注釈を付加するために使用します。
例えば、単純な値は、XMPプロセッサによって任意の修飾子が付加されたとしても、単純な値のままです。
修飾子は、付加される値に関するメタデータで、各修飾子には名前と値があり、名前はXML拡張名でなければなりません。
特定の値に付加されるすべての修飾子の名前はその値内で一意です。
修飾子の値は任意のXMP値形式にすることができ、修飾子の値には複数の修飾子を含めることができます。

xml: lang 修飾子

xml:lang修飾子は単純な非URI値を持ち、その値に修飾子を持つことはできません。
構造体または配列のxml:lang修飾子は、構造体フィールドまたは配列項目の既定言語とみなされます。
IETF RFC3066に従い、xml:lang修飾子の値は言語コードでxml:lang値の比較はすべて大文字と小文字を区別しません。

8.4 XMP 名前空間 プロパティ

XMP規格(ISO 16684-1)で規定された名前空間プロパティなどです。

8.4.1 Adobe PDF名前空間

Adobe PDF名前空間は、Adobe PDF文書で使用されるプロパティです(XMPには規定されていません)。

 - 名前空間 URI: "http://ns.adobe.com/pdf/1.3/"
 - プリフィックス: pdf

以下にAdobe PDF名前空間のプロパティの一覧を記します。

プロパティ名
プロパティ内容
pdf:Keywords
Text
キーワード
pdf:PDFVersion
Text
PDF ファイルのバージョン (例: 1.0、1.3 など)
pdf:Producer
AgentName
PDF ドキュメントを作成したツールの名前
pdf:Trapped
Boolean
ドキュメントがトラップされている場合にTrue

8.4.2 Dublin Core 名前空間

ダブリン・コア(Dublin Core)名前空間は、一般的に使用される一連のプロパティを提供します。 名前と使用法は、ダブリン・コア・メタデータ・イニシアティブ(DCMI)によって作成されたダブリン・コア・メタデータ要素セットで定義されているとおりです。

 - 名前空間 URI: "http://purl.org/dc/elements/1.1/"
 - プリフィックス: dc

以下にダブリンコア名前空間のプロパティの一覧を記します。 これらのプロパティを使用する場合は指定された型でなければなりませんし、プロパティの内容は記述されているとおりでなければなりません。

プロパティ名プロパティ内容
dc:contributorUnordered array of Text DCMI定義:リソースへの貢献を行う責任を負う主体
DCMIコメント:貢献者の例としては個人、組織、サービスなどが挙げられます。通常、貢献者の名前は主体を示すために使用します。
XMP追加:XMPでは貢献者のリストです。これらの貢献者には、dc:creatorにリストされている貢献者を含めないでください。
dc:coverageText DCMIの定義:リソースの空間的または時間的なトピック、リソースの空間的適用性、またはリソースが関連する管轄区域
XMPの追加:XMPでの使用法はリソースの範囲または適用範囲です。
dc:creatorOrdered array of ProperName DCMI定義:リソースの作成に主たる責任を負う主体
DCMIコメント:作成者の例としては、個人、組織、サービスなどが挙げられます。通常は作成者の名前は主体を示すために使用します。
XMP補足事項:XMPでは作成者のリストとして使用されます。エンティティは優先順位の降順でリストしなければなりません(ただし、優先順位の降順が重要な場合)。
dc:dateOrdered array of Date DCMIの定義:リソースのライフサイクルにおけるイベントに関連付けられた時刻または期間
dc:descriptionLanguage Alternative DCMIの定義:リソースの説明
XMPの追加:XMPでの使用法はリソースのコンテンツに関するテキスト記述のリストであり、様々な言語を記述します。
dc:formatMIMEType DCMI定義:リソースのファイル形式、物理媒体、または寸法
DCMIコメント:寸法の例としては、サイズや継続時間などがあります。 推奨されるベストプラクティスは、インターネットメディアタイプ(MIME)のリストなどの制御語彙を使用することです。
XMP追加:XMPではMIMEタイプです。寸法はメディア固有のプロパティを使用して保存されます。
dc:identifierText DCMI定義:特定のコンテキストにおけるリソースへの明確な参照
DCMIコメント:推奨されるベストプラクティスは正式な識別システムに準拠した文字列によってリソースを識別することです。
dc:languageUnordered array of Locale DCMI定義:リソースの言語
XMP追加:XMPでの使用はリソースのコンテンツで使用される言語のリストです。
dc:publisherUnordered array of Text DCMI定義:リソースを利用可能にする責任を負う主体
DCMIコメント:発行者の例としては個人、組織、サービスなどが挙げられます。通常は主体を示すには発行者の名前を使用します。
XMP追加:XMPでは発行者リストです。
dc:relationUnordered array of Text DCMI定義:関連リソース
DCMIコメント:推奨されるベストプラクティスは関連リソースを正式な識別システムに準拠した文字列で識別することです。
XMP追加:XMPでの使用法は関連リソースのリストです。
dc:rightsLanguage Alternative DCMI定義:リソースに関する権利に関する情報
DCMIコメント:通常では、権利情報には知的財産権を含むリソースに関連する様々な財産権に関する記述が含まれます。
XMP追加:XMPでは様々な言語で記述された非公式な権利記述のリストです。
dc:sourceText DCMI定義:記述されているリソースの派生元となる関連リソース
DCMIコメント:記述されているリソースは関連リソースの全体または一部から派生している可能性があります。
推奨されるベストプラクティスは正式な識別システムに準拠した文字列を使用して関連リソースを識別することです。
dc:subjectUnordered array of Text DCMI定義:リソースのトピック
DCMIコメント:通常では、主題はキーワード、キーフレーズ、または分類コードを用いて表現されます。 推奨されるベストプラクティスは統制語彙を使用することです。リソースの空間的または時間的なトピックを記述するにはdc:coverage要素を使用します。
XMP追加:XMPでの用法はリソースの内容を特定する説明フレーズまたはキーワードのリストです。
dc:titleLanguage Alternative DCMI定義:リソースに与えられた名前
DCMIコメント:通常、タイトルはリソースの正式な名称です。
XMP追加:XMPでの使用法は様々な言語で与えられたタイトルまたは名前です。
dc:typeUnordered array of Text DCMI定義:リソースの性質またはジャンル
DCMIコメント:推奨されるベストプラクティスはDCMIタイプ語彙[DCMITYPE]などの統制語彙を使用することです。 リソースのファイル形式、物理媒体、または寸法を記述するには、dc:format要素を使用します。
XMP追加:この要素のXMPでの使用法についてはdc:formatの項目を参照してください。

備考:
dc:titleViewer PreferencesディクショナリDisplayDocTitle要素をTrueにすると、指定された文字列がアプリケーションウインドウのタイトルバーに表示されます。

8.4.3 XMP 名前空間

XMP基本名前空間には基本的な説明情報を提供するプロパティが含まれています。

 - 名前空間 URI: "http://ns.adobe.com/xap/1.0/"
 - プリフィックス: xmp

以下にXMP名前空間のプロパティの一覧を記します。 これらのプロパティを使用する場合は指定された型でなければなりませんし、プロパティの内容は記述されているとおりでなければなりません。

プロパティ名プロパティ内容
xmp:CreateDateDate リソースが作成された日時
デジタルファイルではファイルシステムの作成時刻と一致する必要はありません。 新しく作成されたリソースの場合はファイルの書き込みにかかった時間を除いた作成時刻に近い値になります。 その後のファイル転送やコピーなどによりファイルシステムの時刻は任意に変化する可能性があります。
xmp:CreatorToolAgentName リソースを作成するため最初に使用された既知のツール名
xmp:IdentifierUnordered array of Text 特定のコンテキスト内でリソースを一意に識別する順序付けされていないテキスト文字列の配列
配列の項目はその識別子が準拠する正式な識別システムを示すためにxmpidq:Schemeで修飾することができます。
注:xmp:Identifierプロパティが追加されたのはdc:identifierが元のXMP仕様では配列ではなく単一の識別子として定義されていたためです。 これは、dc:identifierを配列に変更すると既存のXMPプロセッサとの互換性が損なわれることが理由です。
xmp:LabelText リソースをユーザー定義のコレクションのメンバーとして識別する単語または短いフレーズ
注:想定される使用法のひとつはファイル ブラウザーでリソースを整理することです。
xmp:MetadataDateDate このリソースのメタデータが最後に変更された日時
xmp:ModifyDateと同じかそれ以降である必要があります。
xmp:ModifyDateDate リソースが最後に変更された日時
注:このプロパティの値は、通常、ファイルが保存される前に設定されるためファイルのシステム変更日付と必ずしも同じではありません。
xmp:RatingClosed Choice of Real このファイルに対するユーザーによる評価
値は-1または[0..5]の範囲で、-1 は「拒否」、0は「評価なし」を示します。 xmp:Ratingが指定されていない場合の値は0とみなされます。 注:想定される使用法は拒否の概念を追加した典型的な「星評価」です

8.4.4 XMP Rights Management 名前空間

XMP Rights Management 名前空間には、リソースに関連付けられた法的​​制限に関する情報を提供するプロパティが含まれています。

 - 名前空間 URI: "http: //ns .adobe .com/xap/1 .0/rights/"
 - プリフィックス: xmpRights

以下はXMP Rights Managementのプロパティの一覧です。これらのプロパティを使用する場合は、指定された型を使用しなければなりません。

プロパティ名プロパティ内容
xmpRigts:CertificateText権限管理証明書のWeb URL
注意:これは、従来の使用法による通常の(URIではない)単純な値です。
xmpRigts:MarkedBooleanTrueの場合、これは権限管理されたリソースであることを示します。
Falseの場合、これはパブリックドメインのリソースであることを示します。
状態が不明な場合は省略されます。
xmpRigts:OwnerUnorderd
array of Text
リソースの法的所有者のリスト
xmpRigts:UsageTermsLanguage
Alternative
リソースを合法的に使用する方法に関するテキスト指示の集合
さまざまな言語で提供されます。
xmpRigts:WebStatementTextこのリソースの所有権と使用権を示すWeb URL
注意:歴史的な使用法のため、これは通常の(URI ではない)単純な値です。

8.4.5 xmpidq 名前空間

xmpidq名前空間にはxmp:識別子配列で使用されるスキームを定義する単一の修飾子が含まれています。

 - 名前空間 URI: "http://ns.adobe.com/xmp/Identifier/qual/1.0/"
 - プリフィックス: xmpidq

以下に単一のxmpidq修飾子を記します。 修飾子は指定された型でなければなりません。修飾子の内容は説明されているとおりです。

プロパティ名プロパティ内容
xmpidq:SchemeText xmp:識別子配列内の項目に使用される正式な識別スキームの名前を提供する修飾子

ご質問 ・ お問い合わせ

 メールで support@TrustSS.co.jp 宛てに、または 質問のページからお送りいただくようお願いします。
ご要望も受け付けております。


PDF Toolsライト・ライブラリ

PDF 構文解説

 

Pdftools SDK製品