PDF Metadata メタデータ編集 ライブラリ
PDF メタデータ編集ライブラリ 概要
PDFメタデータについて
多くのPDFビュワー(表示アプリケーション)では以下のようなダイアログでPDFメタデータを確認できます。
PDF Metadataはそれぞれの項目を指定して編集できます。

PDF文書にタイトルを指定した場合はそれをPDFビュワーのタイトルバーに表示することができます。

PDF文書に著作権表示を追加できます。

PDF Metadataライブラリは、これらの文字や設定を変更するばかりではなく、XMP仕様で規定された種々(Simple、Structure、Array)のプロパティを言語の修飾子(Qulifire)と共に編集しそれらを読み出すことができます。
この機能を使うと、大量に格納されたPDF文書の中から目的の文書をいち早く検索するシステムを構築できます。
PDF Metadataはこれらを編集します。
<?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-21T00:00:00+09:00</xmp:CreateDate> <xmp:MetadataDate>2026-01-21T00:00:00+09:00</xmp:MetadataDate> <xmp:ModifyDate>2026-01-21T00: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メタデータ編集のサンプルコード
タイトルの編集
メタデータのdc:titleプロパティを編集するサンプルコードです。
PDF2.0より以前のPDF文書タイトルは文書情報(Document Information)ディクショナリのTitle要素に記載していました。
しかし、PDF2.0ではメタデータに記載することが推奨されています。
PDF Metadataライブラリは互換性のためにDocument Informationディクショナリにも記載されます。
PDFのタイトルを編集するサンプル:
#include "Structure.h"
#pragma comment(lib, "PdfStructure.lib")
int main()
{
//初期化
MlpInitialize(_T("0-0314-H9KE1K408HW8"));
//オープン
MlpOpenDoc(_T("in.pdf"), NULL);
//メタデータ インターフェース
XMP_HANDLE h = MlpGetXmpInterface();
//タイトル
XmpSetTitle(h, NULL, _T("ja-JP"), _T("文書タイトル"));
XmpSetTitle(h, NULL, _T("en-UK"), _T("Document Title"));
//タイトルをウインドウタイトルバーに表示
XmpSetDisplayTitleFlag(h, TRUE); //省略可
//文書格納
MlpSavePDF(_T("out.pdf"));
//インターフェース終了
XmpCloseInterface(h);
}
XmpSetDisplayTitleFlag(h, TRUE)を実行すると、既定言語のタイトル文字がPDFビュワーのタイトルバーに表示されます。
これにより、メタデータの<dc:title>プロパティに以下のように記載されます。
<dc:title>
<rdf:Alt>
<rdf:li xml:lang="x-default">文書タイトル</rdf:li>
<rdf:li xml:lang="ja-JP">文書タイトル</rdf:li>
<rdf:li xml:lang="en-UK">Document Title</rdf:li>
</rdf:Alt>
</dc:title>
作成者の編集
メタデータのdc:creatorプロパティを編集するサンプルコードです。
PDF2.0より以前のPDF文書作成者は文書情報(Document Information)ディクショナリのAuthor要素に記載していました。
しかし、PDF2.0ではメタデータに記載することが推奨されています。
PDF Metadataライブラリは互換性のためにDocument Informationディクショナリにも記載されます。
PDFの作成者を編集するサンプル:
#include "Structure.h"
#pragma comment(lib, "PdfStructure.lib")
int main()
{
//初期化
MlpInitialize(_T("0-0314-H9KE1K408HW8"));
//オープン
MlpOpenDoc(_T("in.pdf"), NULL);
//メタデータ インターフェース
XMP_HANDLE h = MlpGetXmpInterface();
//作成者
XmpReplaceCreator(h, _T("作成者"));
//文書格納
MlpSavePDF(_T("out.pdf"));
//インターフェース終了
XmpCloseInterface(h);
}
これにより、メタデータの<dc:creator>プロパティに以下のように記載されます。
<dc:creator>
<rdf:Seq>
<rdf:li>作成者</rdf:li>
</rdf:Seq>
</dc:creator>
サブタイトル(文書の説明)の編集
メタデータのdc:descriptionプロパティを編集するサンプルコードです。
PDF2.0より以前のサブタイトル(文書の説明)は文書情報(Document Information)ディクショナリのSubject要素に記載していました。
しかし、PDF2.0ではメタデータに記載することが推奨されています。
PDF Metadataライブラリは互換性のためにDocument Informationディクショナリにも記載されます。
#include "Structure.h"
#pragma comment(lib, "PdfStructure.lib")
int main()
{
//初期化
MlpInitialize(_T("0-0314-H9KE1K408HW8"));
//オープン
MlpOpenDoc(_T("in.pdf"), NULL);
//メタデータ インターフェース
XMP_HANDLE h = MlpGetXmpInterface();
//説明(Description)
XmpReplaceDescription(h, NULL, _T("ja-JP"), _T("説明"));
XmpSetDescription(h, NULL, _T("en-UK"), _T("Description"));
//文書格納
MlpSavePDF(_T("out.pdf"));
//インターフェース終了
XmpCloseInterface(h);
}
これにより、メタデータの<dc:description>プロパティに以下のように記載されます。
<dc:description>
<rdf:Alt>
<rdf:li xml:lang="x-default">説明</rdf:li>
<rdf:li xml:lang="ja-JP">説明</rdf:li>
<rdf:li xml:lang="en-UK">Description</rdf:li>
</rdf:Alt>
</dc:title>
キーワードの編集
メタデータのdc:keywordsプロパティを編集するサンプルコードです。
PDF2.0より以前のキーワードは文書情報(Document Information)ディクショナリのKeywords要素に記載していました。
しかし、PDF2.0ではメタデータに記載することが推奨されています。
PDF Metadataライブラリはメタデータのpdf:Keywordsにも記載し、互換性のためにDocument Informationディクショナリにも記載されます。
#include "Structure.h"
#pragma comment(lib, "PdfStructure.lib")
int main()
{
//初期化
MlpInitialize(_T("0-0314-H9KE1K408HW8"));
//オープン
MlpOpenDoc(_T("in.pdf"), NULL);
//メタデータ インターフェース
XMP_HANDLE h = MlpGetXmpInterface();
//キーワード
XmpReplaceKeywords(h, _T("キーワード1,キーワード2")); //複数のキーワード指定可
//文書格納
MlpSavePDF(_T("out.pdf"));
//インターフェース終了
XmpCloseInterface(h);
}
これにより、メタデータの<dc:subject>プロパティおよび、<pdf:Keywords>プロパティに以下のように記載されます。
<dc:subject>
<rdf:Bag>
<rdf:li>キーワード1</rdf:li>
<rdf:li>キーワード2</rdf:li>
</rdf:Bag>
</dc:subject>
<pdf:Keywords>キーワード1; キーワード2</pdf:Keywords>
著作権表示の編集
PDF Metadataライブラリは著作権表示をメタデータに記載し、「著作権取得済み」などのフラグを設定します。
#include "Structure.h"
#pragma comment(lib, "PdfStructure.lib")
int main()
{
//初期化
MlpInitialize(_T("0-0314-H9KE1K408HW8"));
//オープン
MlpOpenDoc(_T("in.pdf"), NULL);
//メタデータ インターフェース
XMP_HANDLE h = MlpGetXmpInterface();
//著作権
XmpReplaceRights(h, NULL, _T("ja-JP"), _T("Copyright 2014-2026 株式会社トラスト・ソフトウェア・システム"));
XmpSetRights(h, NULL, _T("en"), _T("Copyright 2014-2026 Trust Software System Co.,Ltd."));
XmpReplaceRightsWebStatement(h, _T("https//www.trustss.co.jp/"));
// XmpReplaceRightsMarked(h, TRUE);
//文書格納
MlpSavePDF(_T("out.pdf"));
//インターフェース終了
XmpCloseInterface(h);
}
これにより、メタデータの<dc:rigths>プロパティに以下のように記載されます。
<dc:rights>
<rdf:Alt>
<rdf:li xml:lang="x-default">Copyright 2014-2025 株式会社トラスト・ソフトウェア・システム</rdf:li>
<rdf:li xml:lang="ja-JP">Copyright 2014-2025 株式会社トラスト・ソフトウェア・システム</rdf:li>
<rdf:li xml:lang="en">Copyright 2014-2025 Trust Software System Co.,Ltd.</rdf:li>
</rdf:Alt>
</dc:rights>
Simpleプロパティの編集
Simple(単純)プロパティの値は Unicode標準で定義されているUnicodeテキストの文字列です。
この値を持つXMPプロパティの要素コンテンツは値を提供するテキストでなければなりません。
#include "Structure.h"
#include "XMP_Constants.h"
#include "XMP_PropertyOptionBit.h"
#pragma comment(lib, "PdfStructure.lib")
int main()
{
//初期化
MlpInitialize(_T("0-0314-H9KE1K408HW8"));
//オープン
MlpOpenDoc(_T("input.pdf"), NULL);
//メタデータ インターフェース
XMP_HANDLE h = MlpGetXmpInterface();
//Simpleプロパティ
TCHAR* prop = _T("Rating");
if (!XmpDoesSimplePropertyExist(h, kXMP_NS_XMP, prop)) {
//書き込み
XmpSetSimpleProperty(h, kXMP_NS_XMP, prop, _T("3"));
}
//読み出し
TCHAR* val;
XmpGetSimpleProperty(h, kXMP_NS_XMP, prop, &val);
_tprintf(_T("%s = %s\n"), prop, val);
//文書格納
MlpSavePDF(_T("out.pdf"));
//インターフェース終了
XmpCloseInterface(h);
}
これにより、メタデータの<xmp:Rating>プロパティに以下のように記載されます。
<xmp:Rating>3</xmp:Rating>
Structureプロパティの編集
Structure(構造)プロパティの値は0個以上の名前付きフィールドのコンテナーです。構造内の各フィールドの順序は重要ではありません。
#include "Structure.h"
#include "XMP_Constants.h"
#include "XMP_PropertyOptionBit.h"
#pragma comment(lib, "PdfStructure.lib")
int main()
{
//初期化
MlpInitialize(_T("0-0314-H9KE1K408HW8"));
//オープン
MlpOpenDoc(_T("input.pdf"), NULL);
//メタデータ インターフェース
XMP_HANDLE h = MlpGetXmpInterface();
//Structureプロパティ
prop = _T("MaxPageSize");
TCHAR* height, * width, * unit;
if (!XmpDoesStructPropertyExist(h, kXMP_NS_XMP_T_PG, prop)) {
//書き込み
XmpSetStructField(h, kXMP_NS_XMP_T_PG, prop, kXMP_NS_XMP_Dimensions, _T("h"), _T("297"));
XmpSetStructField(h, kXMP_NS_XMP_T_PG, prop, kXMP_NS_XMP_Dimensions, _T("w"), _T("210"));
XmpSetStructField(h, kXMP_NS_XMP_T_PG, prop, kXMP_NS_XMP_Dimensions, _T("unit"), _T("mm"));
}
//読み出し
XmpGetStructField(h, kXMP_NS_XMP_T_PG, prop, kXMP_NS_XMP_Dimensions, _T("h"), &height);
_tprintf(_T("%s[h] = %s, "), prop, height);
XmpGetStructField(h, kXMP_NS_XMP_T_PG, prop, kXMP_NS_XMP_Dimensions, _T("w"), &width);
_tprintf(_T("%s[w] = %s, "), prop, width);
XmpGetStructField(h, kXMP_NS_XMP_T_PG, prop, kXMP_NS_XMP_Dimensions, _T("unit"), &unit);
_tprintf(_T("%s[unit] = %s\n"), prop, unit);
//文書格納
MlpSavePDF(_T("out.pdf"));
//インターフェース終了
XmpCloseInterface(h);
}
これにより、メタデータの<xmpTPg:MaxPageSize>プロパティに以下のように記載されます。 PDF Metadataではrdf:Description要素をrdf:parseType="Resource"属性に置き換えたStructureプロパティとします。
<xmpTPg:MaxPageSize rdf:parseType="Resource">
<stDim:h>297</stDim:h>
<stDim:w>210</stDim:w>
<stDim:unit>mm</stDim:unit>
</xmpTPg:MaxPageSize>
Array順序付(Orderd)プロパティの編集
Array(配列)プロパティの値は1から始まる序数で位置付けされた0個以上のアイテムのコンテナです。Arrayアイテムの形式は任意のXMP値形式にすることができ、配列内のすべてのアイテムは同じデータ型にします。
以下では順序付(Orderd)プロパティの場合を示します。
#include "Structure.h"
#include "XMP_Constants.h"
#include "XMP_PropertyOptionBit.h"
#pragma comment(lib, "PdfStructure.lib")
int main()
{
//初期化
MlpInitialize(_T("0-0314-H9KE1K408HW8"));
//オープン
MlpOpenDoc(_T("input.pdf"), NULL);
//メタデータ インターフェース
XMP_HANDLE h = MlpGetXmpInterface();
//Array順序付プロパティ
prop = _T("OrderedSubject");
int cnt;
if (!XmpDoesArrayPropertyExist(h, kXMP_NS_DC, prop)) {
//書き込み
cnt = 3;
TCHAR* val[3] = { _T("XMP"),_T("metadata"),_T("PDF Metadata") };
for (int i = 0; i < cnt; i++) {
XmpAppendArrayItem(h, kXMP_NS_DC, prop, kXMP_PropArrayIsOrdered, val[i]);
}
}
//読み出し
cnt = XmpCountArrayItems(h, kXMP_NS_DC, prop);
for (int i = 1; i <= cnt; i++) {
XmpGetArrayItem(h, kXMP_NS_DC, prop, i, &val);
_tprintf(_T("%s[%d] = %s\n"), prop, i, val);
}
//文書格納
MlpSavePDF(_T("out.pdf"));
//インターフェース終了
XmpCloseInterface(h);
}
これにより、メタデータの<xmpTPg:MaxPageSize>プロパティに以下のように記載されます。
<dc:OrderedSubject>
<rdf:Seq>
<rdf:li>XMP</rdf:li>
<rdf:li>metadata</rdf:li>
<rdf:li>PDF Metadata</rdf:li>
</rdf:Seq>
</dc:OrderedSubject>
Array順序無(Unorderd)プロパティの編集
Array(配列)プロパティの値は1から始まる序数で位置付けされた0個以上のアイテムのコンテナです。Arrayアイテムの形式は任意のXMP値形式にすることができ、配列内のすべてのアイテムは同じデータ型にします。
以下では順序無(Unorderd)プロパティの場合を示します。
#include "Structure.h"
#include "XMP_Constants.h"
#include "XMP_PropertyOptionBit.h"
#pragma comment(lib, "PdfStructure.lib")
int main()
{
//初期化
MlpInitialize(_T("0-0314-H9KE1K408HW8"));
//オープン
MlpOpenDoc(_T("input.pdf"), NULL);
//メタデータ インターフェース
XMP_HANDLE h = MlpGetXmpInterface();
//Array順序無プロパティ
prop = _T("UnorderedSubject");
if (!XmpDoesArrayPropertyExist(h, kXMP_NS_DC, prop)) {
//書き込み
cnt = 3;
TCHAR* val[3] = { _T("XMP"),_T("metadata"),_T("PDF Metadata") };
for (int i = 0; i < cnt; i++)
XmpAppendArrayItem(h, kXMP_NS_DC, prop, kXMP_PropArrayIsUnordered, val[i]);
}
//読み出し
cnt = XmpCountArrayItems(h, kXMP_NS_DC, prop);
for (int i = 1; i <= cnt; i++) {
XmpGetArrayItem(h, kXMP_NS_DC, prop, i, &val);
_tprintf(_T("%s: %s[%d] = %s\n"), dir, prop, i, val);
}
//文書格納
MlpSavePDF(_T("out.pdf"));
//インターフェース終了
XmpCloseInterface(h);
}
これにより、メタデータの<xmpTPg:MaxPageSize>プロパティに以下のように記載されます。
<dc:UnorderedSubject>
<rdf:Bag>
<rdf:li>XMP</rdf:li>
<rdf:li>metadata</rdf:li>
<rdf:li>PDF Metadata</rdf:li>
</rdf:Bag>
</dc:UnorderedSubject>