ホーム > PDF Tools 一覧 > PDF Tools ライト > PDF Easy Parse > C++サンプル > クロスリファレンス情報

PDF Easy Parse C++ クロスリファレンス情報を取得するサンプル

PDF Easy Parse は、PDF構造の解析専用ツール(ライブラリ)です。このPDF Easy Parseライブラリを使えばPDF文書を解析したり、必要な部分を取り出したりする機能を目的のアプリケーションに追加できます。

PDF Easy Parse 購入(価格)


ダウンロード:
PDF Easy Parse無償体験版は、以下からダウンロードしてください。利用許諾契約書をご確認のうえダウンロードしてください。ダウンロードしますと、利用許諾契約書に同意したものとみなします。
評価用ライセンスキーも必ずダウンロードしてください。


他のC++サンプルはこちらです。


インストール

無償体験版をダウンロードして解凍すると以下のようなフォルダーができます。

docライブラリの簡単な説明書
includeヘッダー
liblibおよびDLL
sample/CC言語用サンプル
sample/C++C++言語用サンプル

lib/PdfEasyParse.libを作成するアプリケーションにリンクしてください。lib/PdfEasyParse.dllをアプリケーションの実行ファイル(.exe)のあるフォルダーに配置してください。


4.クロスリファレンス情報 - XRef

クロスリファレンステーブルとは、インダイレクトオブジェクトが記載されている位置を示した表(テーブル)です。詳しくは、「2.3クロスリファレンステーブル(Cross-reference Table)」を参照してください。なお、PDF文書でクロスリファレンステーブルは、その終端のすぐ近くに記載されています。

クロスリファレンステーブルは、クロスリファレンス ストリーム(Cross-reference Stream)としてPDF文書にインダイレクト オブジェクトとして記載されることがあります。この場合のオブジェクトは、ストリームオブジェクトですので、クロスリファレンステーブルとは違う手順で参照しなければなりません。

PDF Easy Parseは、上記どちらの場合でもクロスリファレンス情報を取り出すことができます。


4.1 クロスリファレンス情報を取得

PDF Easy Parseを使ってクロスリファレンス情報を取得を取得する手順を以下に記します。クロスリファレンス テーブルでも、クロスリファレンス ストリームでもクロスリファレンス情報を取得できます。

#include "stdafx.h"
#include "PEParse.h"

#pragma comment(lib,"PdfEasyParse.lib")

int main(int argc, char* argv[])
{
    TPEPHandle  *hPep;
    int         ret = 0;

    //初期化
    hPep = PEPInitialize( "ライセンスキー" );
    if (!hPep){
        fprintf(stderr,"初期化できません。\n");
        return 100;
    }

    //オープン
    if(!PEPOpen( hPep, "HelloWorld.pdf" )){
        fprintf(stderr, "Open Error\n");
        ret = 2;
        goto end_proc;
    }

    //オブジェクトの総数
    long    nObjs = PEPNumOfObjects( hPep );
    printf( "オブジェクトの総数=%d\n\n", nObjs );

    //全オブジェクトの番号、世代番号、オフセット値
    TPEPObjectsOffset *offset;
    PEPGetObjectsOffset( hPep, &offset );

    for (long i = 0; i < nObjs; i++){
        printf("オブジェクト %d %d %c (%d)\n", offset[i].obj, offset[i].gen, offset[i].cUsed, offset[i].offset);
    }

end_proc:
    //後始末
    PEPDestroy( hPep );

    return 0;
}
PEPInitialize() 初期化します。
引数に以下を指定します。
第一引数ライセンスキー
第二引数(省略可)処理の内容をログするファイルのパス
第三引数(省略可)記録されるログのレベル
1以上の値を設定します。レベルは以下のとおりです。ここで指定された値より大きな値のレベルのログが記録されます。
ログレベル
1重要なエラー
2~4エラー
5~9警告
10以上インフォメーション
PEPOpen() PDF文書を開きます。
引数に以下を指定します。
第一引数ハンドル
第二引数PDFファイルのパス
PEPNumOfObjects() PDFに含まれるオブジェクトの総数が戻ります。
引数にハンドルを指定します。
PEPGetObjectsOffset() PDFに含まれるオブジェクトの総数が戻ります。
引数に以下を指定します。
第一引数ハンドル
第二引数クロスリファレンス情報が格納される構造体(TPEPObjectsOffset)のポインター

4.2 出力結果

結果は、以下のようになります。

オブジェクトの総数=8

オブジェクト 0 65535 f (0)
オブジェクト 1 0 n (17)
オブジェクト 2 0 n (376)
オブジェクト 3 0 n (117)
オブジェクト 4 0 n (266)
オブジェクト 5 0 n (544)
オブジェクト 6 0 n (447)
オブジェクト 7 0 n (610)

この結果は、

  • PDF文書が8個のインダイレクト オブジェクトを持っていること
  • 各々のオブジェクトのは、番号0から7が割り振られていること
  • オブジェクト番号0は、フリーな(使われていない)オブジェクトであり、世代番号が65535であることから唯一のフリーなオブジェクトであること("f"で表記)
  • オブジェクト番号1から7のオブジェクトの世代番号はすべて0であること
  • オブジェクト番号1から7のオブジェクトは使用中であること("n"で表記)
  • オブジェクト番号1から7が記載されているオフセット位置は、それぞれ、17、378、117、266、544、447、610であること
を示しています。

なお、クロスリファレンスがストリームの場合は、offset[i].cUsed の値が"s"となる場合があります。これは、そのオブジェクトがオブジェクトストリームとして格納されていることを示します。 例えば、

オブジェクト 12 16 s (1)

である場合オブジェクト番号12のインダイレクトオブジェクトは、オブジェクト番号16のオブジェクトストリームの2番目(ゼロ ベース)に格納されています。またこの場合はオブジェクト番号12の世代番号は必ず0(ゼロ)です。

( トレイラー情報取得 )前のサンプル<<<>>>次のサンプル( Indirect Object インダイレクト オブジェクト情報 )

サンプル コード

サンプルのコードは、以下からダウンロードしてください。

   PepSamples_2_0_2.zip

なお、サンプルコードを実行させるためには、PDF Easy Parseライブラリが必要です。別途ダウンロードしてください。


ご質問・お問い合わせ

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