PDF Imager-LP PDF文書メタデータをXMP解析

PDF Imager-LP PDFのメタデータをXMP解析・変更するサンプル

PDF Imager-LPは、PDF文書を画像(TIFF、JPEG、PNG、BMP)に変換するライブラリです。( PDF Imager-LP概要

価格見積り

ここでは、PDFメタデータをXMP(Extensible Metadata Platform)として解析・変更するサンプルを示します。

ダウンロード:
PDF Imager-LPの無償体験版は、以下からダウンロードできます。無償体験版は、製品版と同じ機能が使えます。
利用許諾契約書をご確認のうえダウンロードしてください。ダウンロードしますと、利用許諾に同意したものとみなします。
評価利用では、ライセンスキーが必要です。

PDFImagerLP-1_9_1.zip(体験版パッケージ)
体験版(評価)用 ライセンスキー"0-0308-43RG841H9104" [評価用ライセンスキー] (無償)

インストール


C# 開発環境 C/C++ 開発環境 Python 開発環境
ライブラリは無償でダウンロードでき、全機能を試用できます。
Imager-LPパッケージをダウンロードしてから、適当なフォルダーに解凍してください。
以下のようなフォルダーができますので適宜ご利用ください。
docライブラリ説明書、利用許諾契約書
includeC/C++用ヘッダー(.h)ファイル
libDLLライブラリ、Libファイル
sampleC/C++言語、C#/VB.NET言語 および、
Windowsアプリケーション(C++およびC#)
サンプルはlib/PdfImagerLPNET.dllおよびlib/x64/PdfImagerLP.dll(またはlib/Win32/PdfImagerLP.dll)を参照しますので、適切なフォルダーにコピーしてください。
サンプルはlib/x64/PdfImagerLP.dll(またはlib/Win32/PdfImagerLP.dll)を参照しますので、適切なフォルダーにコピーしてください。
サンプルはPdfImagerLP.pyを使用し、lib/[x64またはWin32]/_PdfImagerLP.pydおよびlib/[x64またはWin32]/PdfImagerLP.dllを参照しますので、適切なフォルダーにコピーするか、以下のような手順でPython DLLの検索パスを設定してください。
import sys
if sys.maxsize > 2**32:
    sys.path.insert(1,'[Imager-LPインストールフォルダー名]/lib/x64')
else:
    sys.path.insert(1,'[Imager-LPインストールフォルダー名]/lib/Win32')

メタデータをXMPとして解析するサンプルコード

PDF文書からメタデータXMPとしてダンプ出力するサンプルコードです。

C# C/C++ Python 他のサンプル ダウンロード
#include "ImagerLP.h"
#pragma comment(lib, "PdfImagerLP.lib")

int main()
{
    //初期化
    if (0 > MlpInitialize("0-0308-43RG841H9104")) {
        printf("ライセンスキーが不正です\n");
        exit(100);
    }

    //オープン
    if (0 > MlpOpenDoc("input.pdf", "", ""))
        printf("オープンエラー\n");
     else {
        //XMPインターフェース
        XMP_TK_HANDLE h = MlpGetXmpInterface();

        //XMP解析結果をダンプ出力
        XmpDumpObjectToConsole(h);

        //クローズ
        XmpCloseInterface(h);
        MlpCloseDoc();
    }

    //終了
    MlpUninitialize();
}
MlpInitialize初期化
 引数にライセンスキー"0-0308-43RG841H9104" (評価用ライセンスキー) を指定します。
MlpOpenDocPDF文書をオープン
 第一引数:ファイルパス名
 第二引数:オーナーパスワード
 第三引数:ユーザーパスワード
MlpGetXmpInterfaceXMPインターフェースを取得
 ハンドルが戻ります。
XmpDumpObjectToConsoleXMP解析の結果をコンソールに出力
 第一引数:インターフェースハンドル
XmpCloseInterfaceXMPインターフェースをクローズ
MlpCloseDocPDF文書をクローズ
MlpUninitializeライブラリの終了
C# C/C++ Python 他のサンプル ダウンロード
using System;
using PDFTools.PdfImagerLP;

namespace XmpDumpCsp
{
    class XmpDump
    {
        static void Main(string[] args)
        {
            // インスタンス生成
            using (var mlp = new PdfImager())
            {
                // 初期化
                if (0 > mlp.Initialize("0-0308-43RG841H9104"))
                {
                    Console.WriteLine("初期化エラー");
                    return;
                }

                // オープン
                if (0 > mlp.OpenDoc("input.pdf"))
                {
                    Console.WriteLine("オープンエラー");
                    mlp.Uninitialize();
                    return;
                }
                else
                {
                    // Xmpインターフェース
                    XmpInterface xmp = mlp.GetXmpInterface();

                    // ダンプ出力
                    xmp.DumpObjectToConsole();

                    // クローズ
                    xmp.CloseInterface();
                    mlp.CloseDoc();
                }

                //終了
                mlp.Uninitialize();
            }
        }
    }
}
Initialize初期化
 引数にライセンスキー"0-0308-43RG841H9104" (評価用ライセンスキー) を指定します。
OpenDocPDF文書をオープン
 第一引数:ファイルパス名
 第二引数:オーナーパスワード(省略可)
 第三引数:ユーザーパスワード(省略可)
GetXmpInterfaceXMPインターフェースを取得
GetMetadatXMPメタデータを出力
CloseInterfaceインターフェースクローズ
CloseDocPDF文書をクローズ
Uninitializeライブラリの終了
C# C/C++ Python 他のサンプル ダウンロード
from PdfImagerLP import Mlp

#インスタンス生成
mlp = Mlp();

#初期化
if mlp.Initialize("0-0308-43RG841H9104") < 0:
    print("ライセンスキーが不正です。");
    exit()

#オープン
if mlp.OpenDoc("in.pdf") < 0:
    print("PDFファイルを開けません。")
else:
    # XMPインターフェース
    xmp = mlp.GetXmpInterface()

    # XMP出力
    xmp.DumpObjectToConsole()

    #クローズ
    xmp.CloseInterface()
    mlp.CloseDoc()

# 後始末
mlp.Uninitialize();
Initialize初期化
 引数にライセンスキー"0-0308-43RG841H9104" (評価用ライセンスキー) を指定します。
OpenDocPDF文書をオープン
 第一引数:ファイルパス名
 第二引数:オーナーパスワード(省略可)
 第三引数:ユーザーパスワード(省略可)
GetXmpInterfaceXMPインターフェースを取得
DumpObjectToConsoleXMPメタデータを出力
CloseInterfaceXMPインターフェースをクローズ
CloseDocPDF文書をクローズ
Uninitializeライブラリの終了

以下は、上記コードで抽出されるXMPメタデータの例です。
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 = "2024-03-30T11:38:22+09:00"
    xmp:CreateDate = "2024-03-30T11:38:15+09:00"
    xmp:MetadataDate = "2024-03-30T11: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"

メタデータのSimpleプロパティを検索・変更するサンプルコード

PDF文書のメタデータであるSimpleプロパティを検索・変更するサンプルコードです。

C# C/C++ Python 他のサンプル ダウンロード
#include "ImagerLp.h"
#pragma comment(lib, "PdfImagerLP.lib")

int main()
{
    // 初期化
    if(MlpInitialize("0-0308-43RG841H9104")){
        printf("ライセンスキーが不正です。正しいライセンスキーを使用してください。");
        return 1;
    }

    // PDF文書オープン
    if(MlpOpenDoc("ファイル.pdf", NULL, NULL)){
        printf("PDFファイルをオープンできません。");
        return 2;
    }

    // XMPインターフェース
    XMP_TK_HANDLE h = MlpGetXmpInterface();

    // Simpleプロパティ
    if (!XmpDoesSimplePropertyExist(h, "http://ns.adobe.com/xap/1.0/", "CreateDate")) {
        printf("プロパティはありません\n");
    }
    else {
        time_t t;
        struct tm tm;

        // Simpleプロパティ値取得
        XmpGetPropertyDate(h, "http://ns.adobe.com/xap/1.0/", "CreateDate", &t);
        localtime_s(&tm, &t);
        printf("%d-%d-%d %d:%d:%d\n", tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
    }

    // Simpleプロパティ変更(または追加)
    if (!XmpSetSimplePropertyCurrentDate(h, "http://ns.adobe.com/xap/1.0/", "ABCD")) {
        // メタデータを更新
        XmpUpdateDocument(h);

        // 更新されたPDF文書を格納
        XmpDocumentToFile(h, "out.pdf");
    }

    // クローズ
    XmpCloseInterface(h);
    MlpCloseDoc();

    // 後始末
    MlpUninitialize();

    return 0;
}
MlpInitialize初期化
 引数にライセンスキー"0-0308-43RG841H9104" (評価用ライセンスキー) を指定します。
MlpOpenDocPDF文書をオープン
 第一引数:ファイルパス名
 第二引数:オーナーパスワード
 第三引数:ユーザーパスワード
MlpGetXmpInterfaceXMPインターフェースを取得
 ハンドルが戻ります。
XmpDoesSimplePropertyExistSimpleプロパティの有無を確認
 第一引数:ハンドル
 第二引数:プロパティの名前空間URL
 第三引数:プロパティ名
XmpGetSimplePropertyDateプロパティに指定された日時を取得
 第一引数:ハンドル
 第二引数:プロパティの名前空間URL
 第三引数:プロパティ名
 第四引数:日時データ
XmpSetSimplePropertyCurrentDateプロパティを現在日時に変更、もしくは現在日時のプロパティを追加
 第一引数:ハンドル
 第二引数:プロパティの名前空間URL
 第三引数:プロパティ名
XmpUpdateDocumentPDF文書のメタデータを更新
XMPインターフェース
XmpDocumentToFile更新されたPDF文書を出力
 第一引数:ハンドル
 第二引数:出力ファイルパス
XmpCloseInterfaceXMPインターフェースをクローズ
MlpCloseDocPDF文書をクローズ
MlpUninitializeライブラリの終了
C# C/C++ Python 他のサンプル ダウンロード
using System;
using PDFTools.PdfImagerLP;

namespace XmpSimpleCsp
{
    class XmpSimple
    {
        static void Main()
        {
            // インスタンス生成
            using (var mlp = new PdfImager())
            {
                // 初期化
                if (0 > mlp.Initialize("0-0308-43RG841H9104"))
                {
                    Console.WriteLine("初期化エラー");
                    return;
                }

                // オープン
                if (0 > mlp.OpenDoc("in.pdf"))
                {
                    Console.WriteLine("オープンエラー");
                    mlp.Uninitialize();
                    return;
                }

                // Xmpインターフェース
                XmpInterface xmp = mlp.GetXmpInterface();

                // Simpleプロパティ値取得
                if (xmp.DoesSimplePropertyExist("http://ns.adobe.com/xap/1.0/", "CreateDate") < 1)
                {
                    Console.WriteLine("プロパティがありません");
                }
                else
                {
                    DateTime dt = xmp.GetPropertyDate("http://ns.adobe.com/xap/1.0/", "CreateDate");
                    Console.WriteLine(dt);
                }

                // Simpleプロパティ変更(追加)
                if (xmp.SetSimplePropertyCurrentDate("http://ns.adobe.com/xap/1.0/", "ABCD") == 0)
                {
                    // PDF文書更新
                    xmp.UpdateDocument();

                    // PDF出力
                    mlp.DocumentToFile("out.pdf");
                }

                //クローズ
                xmp.CloseInterface();
                mlp.CloseDoc();
                mlp.Uninitialize();
            }
        }
    }
}
Initialize初期化
 引数にライセンスキー"0-0308-43RG841H9104" (評価用ライセンスキー) を指定します。
OpenDocPDF文書をオープン
 第一引数:ファイルパス名
 第二引数:オーナーパスワード
 第三引数:ユーザーパスワード
GetXmpInterfaceXMPインターフェースを取得
DoesSimplePropertyExistSimpleプロパティの有無を確認
 第一引数:プロパティの名前空間URL
 第二引数:プロパティ名
GetSimplePropertyDateプロパティに指定された日時を取得
 第一引数:プロパティの名前空間URL
 第二引数:プロパティ名
SetSimplePropertyCurrentDateプロパティを現在日時に変更、もしくは現在日時のプロパティを追加
 第一引数:プロパティの名前空間URL
 第二引数:プロパティ名
UpdateDocumentPDF文書のメタデータを更新
XMPインターフェース
DocumentToFile更新されたPDF文書を出力
 引数:出力ファイルパス
CloseInterfaceXMPインターフェースをクローズ
CloseDocPDF文書をクローズ
Uninitializeライブラリの終了
C# C/C++ Python 他のサンプル ダウンロード
from PdfImagerLP import Mlp

#インスタンス生成
mlp = Mlp();

#初期化
if mlp.Initialize("0-0308-43RG841H9104") < 0:
    print("ライセンスキーが不正です。");
    exit()

#オープン
if mlp.OpenDoc("in.pdf") < 0:
    print("PDFファイルを開けません。")
else:
    #Simpleプロパティ値取得
    xmp = mlp.GetXmpInterface()
    if 0 >= xmp.DoesSimplePropertyExist("http://ns.adobe.com/xap/1.0/", "CreateDate"):
        print('プロパティはありません')
    else:
        print(xmp.GetPropertyDate("http://ns.adobe.com/xap/1.0/", "CreateDate"))

    #Simpleプロパティ変更(追加)
    if 0 == xmp.SetSimplePropertyCurrentDate("http://ns.adobe.com/xap/1.0/", "ABCD"):
        #PDF文書更新
        xmp.UpdateDocument()

        #更新された文書を出力
        mlp.DocumentToFile("out.pdf")

    # クローズ
    xmp.CloseInterface()
    mlp.CloseDoc();

# 後始末
mlp.Uninitialize();
Initialize初期化
 引数にライセンスキー"0-0308-43RG841H9104" (評価用ライセンスキー) を指定します。
OpenDocPDF文書をオープン
 第一引数:ファイルパス名
 第二引数:オーナーパスワード
 第三引数:ユーザーパスワード
GetXmpInterfaceXMPインターフェースを取得
DoesSimplePropertyExistSimpleプロパティの有無を確認
 第一引数:プロパティの名前空間URL
 第二引数:プロパティ名
GetSimplePropertyDateプロパティに指定された日時を取得
 第一引数:プロパティの名前空間URL
 第二引数:プロパティ名
SetSimplePropertyCurrentDateプロパティを現在日時に変更、もしくは現在日時のプロパティを追加
 第一引数:プロパティの名前空間URL
 第二引数:プロパティ名
UpdateDocumentPDF文書のメタデータを更新
XMPインターフェース
DocumentToFile更新されたPDF文書を出力
 引数:出力ファイルパス
CloseDocPDF文書をクローズ
Uninitializeライブラリの終了

以下は、上記コードで変更されたメタデータの例です。
  <xmp:CreateDate>2024-03-30T11:38:15+09:00</xmp:CreateDate>
  <xmp:ABCD>2024-03-30T11:37:02+09:00</xmp:ABCD>

メタデータのarrayプロパティを検索・変更するサンプルコード

PDF文書のメタデータであるArrayプロパティを検索・変更するサンプルコードです。

C# C/C++ Python 他のサンプル ダウンロード
#include "ImagerLp.h"
#pragma comment(lib, "PdfImagerLP.lib")

int main()
{
    // 初期化
    if(MlpInitialize("0-0308-43RG841H9104")){
        printf("ライセンスキーが不正です。正しいライセンスキーを使用してください。");
        return 1;
    }

    // PDF文書オープン
    if(MlpOpenDoc("ファイル.pdf", NULL, NULL)){
        printf("PDFファイルをオープンできません。");
        return 2;
    }

    // XMPインターフェース
    XMP_TK_HANDLE h = MlpGetXmpInterface();

    // Arrayプロパティ
    if (!XmpDoesArrayPropertyExist(h, "http://purl.org/dc/elements/1.1/", "subject")) {
        printf("プロパティはありません\n");
    }
    else {
        //項目
        if (XmpDoesArrayItemExist(h, "http://purl.org/dc/elements/1.1/", "subject", 1)) {
            // Arrayプロパティ値取得
            char *data;
            XmpGetArrayItem(h, "http://purl.org/dc/elements/1.1/", "subject", 1, &data);
            printf("Array(subject)[1]=%s\n", data);
        }

    // Arrayプロパティ変更(または追加)
    if (!XmpSetArrayItem(h, "http://purl.org/dc/elements/1.1/", "subject", 1, "ABCD")) {
        // メタデータを更新
        XmpUpdateDocument(h);

        // 更新されたPDF文書を格納
        XmpDocumentToFile(h, "out.pdf");
    }

    // クローズ
    XmpCloseInterface(h);
    MlpCloseDoc();

    // 後始末
    MlpUninitialize();

    return 0;
}
MlpInitialize初期化
 引数にライセンスキー"0-0308-43RG841H9104" (評価用ライセンスキー) を指定します。
MlpOpenDocPDF文書をオープン
 第一引数:ファイルパス名
 第二引数:オーナーパスワード
 第三引数:ユーザーパスワード
MlpGetXmpInterfaceXMPインターフェースを取得
 ハンドルが戻ります。
XmpDoesArrayPropertyExistArrayプロパティ項目の有無を確認
 第一引数:ハンドル
 第二引数:プロパティの名前空間URL
 第三引数:プロパティ名
 第四引数:項目番号
XmpGetArrayItemプロパティの項目データを取得
 第一引数:ハンドル
 第二引数:プロパティの名前空間URL
 第三引数:プロパティ名
 第四引数:項目番号
 第五引数:データの格納アドレス
XmpSetArrayItemArrayプロパティを変更、もしくは追加
 第一引数:ハンドル
 第二引数:プロパティの名前空間URL
 第三引数:プロパティ名
 第四引数:項目番号
 第五引数:格納するデータ
XmpUpdateDocumentPDF文書のメタデータを更新
XMPインターフェース
XmpDocumentToFile更新されたPDF文書を出力
 第一引数:ハンドル
 第二引数:出力ファイルパス
XmpCloseInterfaceXMPインターフェースをクローズ
MlpCloseDocPDF文書をクローズ
MlpUninitializeライブラリの終了
C# C/C++ Python 他のサンプル ダウンロード
using System;
using PDFTools.PdfImagerLP;

namespace XmpArrayCsp
{
    class XmpArray
    {
        static void Main()
        {
            // インスタンス生成
            using (var mlp = new PdfImager())
            {
                // 初期化
                if (0 > mlp.Initialize("0-0308-43RG841H9104"))
                {
                    Console.WriteLine("初期化エラー");
                    return;
                }

                // オープン
                if (0 > mlp.OpenDoc("in.pdf"))
                {
                    Console.WriteLine("オープンエラー");
                    mlp.Uninitialize();
                    return;
                }

                // Xmpインターフェース
                XmpInterface xmp = mlp.GetXmpInterface();

                // Arrayプロパティ	の有無
                if (xmp.DoesArrayPropertyExist("http://purl.org/dc/elements/1.1/", "subject") < 1)
                {
                    Console.WriteLine("Has not Propert");
                }
                else
                {
                    // Array項目取得
                    Console.WriteLine(xmp.GetArrayItem("http://purl.org/dc/elements/1.1/", "subject", 1));

                    // Array項目の変更(追加)
                    xmp.SetArrayItem("http://purl.org/dc/elements/1.1/", "subject", 1, "ABCD");

                    // PDF文書更新
                    xmp.UpdateDocument();

                    // PDF出力
                    mlp.DocumentToFile("out.pdf");
                }

                // クローズ
                xmp.CloseInterface();
                mlp.CloseDoc();
                mlp.Uninitialize();
            }
        }
    }
}
Initialize初期化
 引数にライセンスキー"0-0308-43RG841H9104" (評価用ライセンスキー) を指定します。
OpenDocPDF文書をオープン
 第一引数:ファイルパス名
 第二引数:オーナーパスワード
 第三引数:ユーザーパスワード
GetXmpInterfaceXMPインターフェースを取得
DoesArrayPropertyExistArrayプロパティ項目の有無を確認
 第一引数:プロパティの名前空間URL
 第二引数:プロパティ名
 第三引数:項目番号
GetArrayItemプロパティの項目データを取得
 第一引数:プロパティの名前空間URL
 第二引数:プロパティ名
 第三引数:項目番号
SetArrayItemArrayプロパティを変更、もしくは追加
 第一引数:プロパティの名前空間URL
 第二引数:プロパティ名
 第三引数:項目番号
 第四引数:格納するデータ
UpdateDocumentPDF文書のメタデータを更新
XMPインターフェース
DocumentToFile更新されたPDF文書を出力
 引数:出力ファイルパス
CloseInterfaceXMPインターフェースをクローズ
CloseDocPDF文書をクローズ
Uninitializeライブラリの終了
C# C/C++ Python 他のサンプル ダウンロード
from PdfImagerLP import Mlp

#インスタンス生成
mlp = Mlp();

#初期化
if mlp.Initialize("0-0308-43RG841H9104") < 0:
    print("ライセンスキーが不正です。");
    exit()

#オープン
if mlp.OpenDoc("in.pdf") < 0:
    print("PDFファイルを開けません。")
else:
    #Arrayプロパティ取得
    xmp = mlp.GetXmpInterface()
    if 0 >= xmp.DoesArrayPropertyExist("http://purl.org/dc/elements/1.1/", "subject"):
        print('プロパティがない')
    else:
        print(xmp.GetArrayItem("http://purl.org/dc/elements/1.1/", "subject", 1))

        #変更(追加)
        xmp.SetArrayItem("http://purl.org/dc/elements/1.1/", "subject", 1, "ABCD")

        # PDF文書のメタデータを更新
        xmp.UpdateDocument()

        # PDF文書を格納
        mlp.DocumentToFile("out.pdf")

    # クローズ
    xmp.CloseInterface()
    mlp.CloseDoc();

# 後始末
mlp.Uninitialize();
Initialize初期化
 引数にライセンスキー"0-0308-43RG841H9104" (評価用ライセンスキー) を指定します。
OpenDocPDF文書をオープン
 第一引数:ファイルパス名
 第二引数:オーナーパスワード
 第三引数:ユーザーパスワード
GetXmpInterfaceXMPインターフェースを取得
DoesArrayPropertyExistArrayプロパティ項目の有無を確認
 第一引数:プロパティの名前空間URL
 第二引数:プロパティ名
 第三引数:項目番号
GetArrayItemプロパティの項目データを取得
 第一引数:プロパティの名前空間URL
 第二引数:プロパティ名
 第三引数:項目番号
SetArrayItemArrayプロパティを変更、もしくは追加
 第一引数:プロパティの名前空間URL
 第二引数:プロパティ名
 第三引数:項目番号
 第四引数:格納するデータ
UpdateDocumentPDF文書のメタデータを更新
XMPインターフェース
DocumentToFile更新されたPDF文書を出力
 引数:出力ファイルパス
CloseDocPDF文書をクローズ
Uninitializeライブラリの終了

以下は、上記コードで検索・変更されたArrayメタデータの例です。
  <dc:subject>
    <rdf:Bag>
      <rdf:li>ABCD</rdf:li>
      <rdf:li>metadata</rdf:li>
      <rdf:li>ISO Standard</rdf:li>
    </rdf:Bag>
  </dc:subject>

メタデータのstructプロパティを検索・変更するサンプルコード

PDF文書のメタデータであるStructureプロパティを検索・変更するサンプルコードです。

C# C/C++ Python 他のサンプル ダウンロード
#include "ImagerLp.h"
#pragma comment(lib, "PdfImagerLP.lib")

int main()
{
    // 初期化
    if(MlpInitialize("0-0308-43RG841H9104")){
        printf("ライセンスキーが不正です。正しいライセンスキーを使用してください。");
        return 1;
    }

    // PDF文書オープン
    if(MlpOpenDoc("ファイル.pdf", NULL, NULL)){
        printf("PDFファイルをオープンできません。");
        return 2;
    }

    // XMPインターフェース
    XMP_TK_HANDLE h = MlpGetXmpInterface();

    // Structureプロパティ
    if (!XmpDoesStructPropertyExist(h, "http://ns.adobe.com/xap/1.0/t/pg/", "MaxPageSize")) {
        printf("Has not Property\n");
    }
    else {
        // フィールド
        if (XmpDoesStructFieldExist(h, "http://ns.adobe.com/xap/1.0/t/pg/", "MaxPageSize", "http://ns.adobe.com/xap/1.0/sType/Dimensions#", "h")) {
            // 取得
            char *data;
            XmpGetStructField(h, "http://ns.adobe.com/xap/1.0/t/pg/", "MaxPageSize", "http://ns.adobe.com/xap/1.0/sType/Dimensions#", "h", &data);
            printf("Struct(MaxPageSize:h)=%s\n", data);

            // 変更(追加)
            XmpSetStructField(h, "http://ns.adobe.com/xap/1.0/t/pg/", "MaxPageSize", "http://ns.adobe.com/xap/1.0/sType/Dimensions#", "h", "300");
            XmpSetStructField(h, "http://ns.adobe.com/xap/1.0/t/pg/", "MaxPageSize", "http://ns.adobe.com/xap/1.0/sType/Dimensions#", "hMax", "1000");

            // メタデータを更新
            XmpUpdateDocument(h);
            // 変更されたPDF文書を格納
            MlpDocumentToFile(h, "out.pdf");
        }
    }

    // クローズ
    XmpCloseInterface(h);
    MlpCloseDoc();

    // 後始末
    MlpUninitialize();

    return 0;
}
MlpInitialize初期化
 引数にライセンスキー"0-0308-43RG841H9104" (評価用ライセンスキー) を指定します。
MlpOpenDocPDF文書をオープン
 第一引数:ファイルパス名
 第二引数:オーナーパスワード
 第三引数:ユーザーパスワード
MlpGetXmpInterfaceXMPインターフェースを取得
 ハンドルが戻ります。
XmpDoesStructPropertyExiststructプロパティの有無を確認
 第一引数:ハンドル
 第二引数:プロパティの名前空間URL
 第三引数:プロパティ名
 第四引数:フィールドの名前空間URL
 第五引数:フィールド名
XmpGetStructFieldプロパティのフィールド値を取得
 第一引数:ハンドル
 第二引数:プロパティの名前空間URL
 第三引数:プロパティ名
 第四引数:フィールドの名前空間URL
 第五引数:フィールド名
 第六引数:取得データアドレス
XmpSetStructPropertyCurrentDateプロパティを現在日時に変更、もしくは現在日時のプロパティを追加
 第一引数:ハンドル
 第二引数:プロパティの名前空間URL
 第三引数:プロパティ名
 第四引数:フィールドの名前空間URL
 第五引数:フィールド名
 第六引数:格納データ
XmpUpdateDocumentPDF文書のメタデータを更新
XMPインターフェース
MlpDocumentToFile更新されたPDF文書を出力
 第一引数:ハンドル
 第二引数:出力ファイルパス
XmpCloseInterfaceXMPインターフェースをクローズ
MlpCloseDocPDF文書をクローズ
MlpUninitializeライブラリの終了
C# C/C++ Python 他のサンプル ダウンロード
using System;
using PDFTools.PdfImagerLP;

namespace XmpstructCsp
{
    class Xmpstruct
    {
        static void Main()
        {
            // インスタンス生成
            using (var mlp = new PdfImager())
            {
                // 初期化
                if (0 > mlp.Initialize("0-0308-43RG841H9104"))
                {
                    Console.WriteLine("初期化エラー");
                    return;
                }

                // オープン
                if (0 > mlp.OpenDoc("in.pdf"))
                {
                    Console.WriteLine("オープンエラー");
                    mlp.Uninitialize();
                    return;
                }

                // Xmpインターフェース
                XmpInterface xmp = mlp.GetXmpInterface();

                //Structureプロパティ
                if (xmp.DoesStructPropertyExist("http://ns.adobe.com/xap/1.0/t/pg/", "MaxPageSize") < 1)
                {
                    Console.WriteLine("プロパティはありません");
                }
                else
                {
                    // フィールド
                    if (xmp.DoesStructFieldExist("http://ns.adobe.com/xap/1.0/t/pg/", "MaxPageSize", "http://ns.adobe.com/xap/1.0/sType/Dimensions#", "h") > 0)
                    {
                        // フィールド値取得
                        string data = xmp.GetStructField("http://ns.adobe.com/xap/1.0/t/pg/", "MaxPageSize", "http://ns.adobe.com/xap/1.0/sType/Dimensions#", "h");
                        Console.WriteLine($"Struct(MaxPageSize:h)={data}");

                        // フィールド値変更(追加)
                        xmp.SetStructField("http://ns.adobe.com/xap/1.0/t/pg/", "MaxPageSize", "http://ns.adobe.com/xap/1.0/sType/Dimensions#", "h", "300");
                        xmp.SetStructField("http://ns.adobe.com/xap/1.0/t/pg/", "MaxPageSize", "http://ns.adobe.com/xap/1.0/sType/Dimensions#", "hMax", "1000");

                        // PDF文書更新
                        xmp.UpdateDocument();

                        // 更新されたPDF文書を出力
                        mlp.DocumentToFile("out.pdf");
                    }
                }

                //クローズ
                xmp.CloseInterface();
                mlp.CloseDoc();
                mlp.Uninitialize();
            }
        }
    }
}
Initialize初期化
 引数にライセンスキー"0-0308-43RG841H9104" (評価用ライセンスキー) を指定します。
OpenDocPDF文書をオープン
 第一引数:ファイルパス名
 第二引数:オーナーパスワード
 第三引数:ユーザーパスワード
GetXmpInterfaceXMPインターフェースを取得
DoesStructPropertyExiststructプロパティの有無を確認
 第一引数:プロパティの名前空間URL
 第二引数:プロパティ名
 第三引数:フィールドの名前空間URL
 第四引数:フィールド名
GetStructFieldプロパティのフィールド値を取得
 第一引数:プロパティの名前空間URL
 第二引数:プロパティ名
 第三引数:フィールドの名前空間URL
 第四引数:フィールド名
 第五引数:取得データアドレス
SetStructPropertyCurrentDateプロパティを現在日時に変更、もしくは現在日時のプロパティを追加
 第一引数:プロパティの名前空間URL
 第二引数:プロパティ名
 第三引数:フィールドの名前空間URL
 第四引数:フィールド名
 第五引数:格納データ
UpdateDocumentPDF文書のメタデータを更新
XMPインターフェース
DocumentToFile更新されたPDF文書を出力
 引数:出力ファイルパス
CloseInterfaceXMPインターフェースをクローズ
CloseDocPDF文書をクローズ
Uninitializeライブラリの終了
C# C/C++ Python 他のサンプル ダウンロード
from PdfImagerLP import Mlp

# インスタンス生成
mlp = Mlp();

# 初期化
if mlp.Initialize("0-0308-43RG841H9104") < 0:
    print("ライセンスキーが不正です。");
    exit()

# オープン
if mlp.OpenDoc("in.pdf") < 0:
    print("PDFファイルを開けません。")
else:
    # Structureプロパティ
    xmp = mlp.GetXmpInterface()
    if 0 >= xmp.DoesStructPropertyExist("http://ns.adobe.com/xap/1.0/t/pg/", "MaxPageSize"):
        print('プロパティはありません')
    else:
        # Structureプロパティのフィールド値
        print(xmp.GetStructField("http://ns.adobe.com/xap/1.0/t/pg/", "MaxPageSize", "http://ns.adobe.com/xap/1.0/sType/Dimensions#", "h"))

        # フィールド値変更(追加)
        xmp.SetStructField("http://ns.adobe.com/xap/1.0/t/pg/", "MaxPageSize", "http://ns.adobe.com/xap/1.0/sType/Dimensions#", "h", "300");
        xmp.SetStructField("http://ns.adobe.com/xap/1.0/t/pg/", "MaxPageSize", "http://ns.adobe.com/xap/1.0/sType/Dimensions#", "hMax", "1000");

        # PDF文書更新
        xmp.UpdateDocument()

        # 更新された文書を出力
        mlp.DocumentToFile("out.pdf")

    # クローズ
    xmp.CloseInterface()
    mlp.CloseDoc();

# 後始末
mlp.Uninitialize();
Initialize初期化
 引数にライセンスキー"0-0308-43RG841H9104" (評価用ライセンスキー) を指定します。
OpenDocPDF文書をオープン
 第一引数:ファイルパス名
 第二引数:オーナーパスワード
 第三引数:ユーザーパスワード
GetXmpInterfaceXMPインターフェースを取得
DoesStructPropertyExiststructプロパティの有無を確認
 第一引数:プロパティの名前空間URL
 第二引数:プロパティ名
 第三引数:フィールドの名前空間URL
 第四引数:フィールド名
GetStructFieldプロパティのフィールド値を取得
 第一引数:プロパティの名前空間URL
 第二引数:プロパティ名
 第三引数:フィールドの名前空間URL
 第四引数:フィールド名
 第五引数:取得データアドレス
SetStructPropertyCurrentDateプロパティを現在日時に変更、もしくは現在日時のプロパティを追加
 第一引数:プロパティの名前空間URL
 第二引数:プロパティ名
 第三引数:フィールドの名前空間URL
 第四引数:フィールド名
 第五引数:格納データ
UpdateDocumentPDF文書のメタデータを更新
XMPインターフェース
DocumentToFile更新されたPDF文書を出力
 引数:出力ファイルパス
CloseDocPDF文書をクローズ
Uninitializeライブラリの終了

以下は、上記コードで変更されたメタデータの例です。
  <xmpTPg:MaxPageSize rdf:parseType="Resource">
    <stDim:h>300</stDim:h>
    <stDim:w>210</stDim:w>
    <stDim:unit>mm</stDim:unit>
    <stDim:hMax>1000</stDim:hMax>
  </xmpTPg:MaxPageSize>

ご質問、お問い合わせ

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

PDF Toolsライト

PDF Imager-LPサンプル

PDF 構文解説

(ISO32000-1より)

PDF Tools C++サンプル