PDF Validator(規格準拠検証) サンプル・ソースコード

PDF Validator(規格準拠検証)

PDF Validator 「PDF Validator」ソフトは、PDF文書、PDF/A文書がISO規格に準拠しているかチェックします。
文書交換や長期間保存されるビジネス文書などは、その構成がPDF/A(またはPDF)として正確であることが検証されるべきです。

検証 には以下が含まれます:
  • PDF規格(PDF1.x,PDF2.0,PDF/A-1,PDF/A-2,PDF/A-3)への適合検証
  • PDF適合に必要な字句、構文、およびセマンティックの検証
  • 詳細(または要約)検証レポート作成
  • 詳細なエラーの説明(番号、タイプ、説明、PDFオブジェクト、ページ番号)
  • エラー、警告、情報を分類
  • カスタムプロファイルで定義された企業ディレクティブとの適合性を検証

無償評価版のダウンロードとインストール


C#開発環境 C/C++開発環境
1.Zipファイルをダウンロードする場合
ライブラリ(評価版API)は無償でダウンロードできます。
ファイルをダウンロードしてから適当なフォルダーに解凍してください。
以下のようなフォルダーができあがりますので、適宜ご利用ください。
binライブラリやライセンスマネージャーなど
doc使用説明書やjavadocなど
includeC/C++用のヘッダー(.h)ファイル
jar VALA.jar(Javaのラッパー)
libC/C++用のlibファイル
samples各種開発言語のサンプル
サンプルの実行前に参照設定などを行ってください。
無償評価版と共にダウンロードしたライセンスキーを bin/LicenseManager.exeを使って登録してください。
2.NuGetでインストールする場合
nuget.org から PdfTools.PdfValidator をインストールします。

  NuGetでのインストール手順

この場合は参照設定などの必要はありません。 評価用ライセンスは こちら から取得してください。
C#開発環境 C/C++開発環境
ライブラリ(評価版API)は無償でダウンロードできます。
ファイルをダウンロードしてから適当なフォルダーに解凍してください。
以下のようなフォルダーができあがりますので、適宜ご利用ください。
binライブラリやライセンスマネージャーなど
doc使用説明書やjavadocなど
includeC/C++用のヘッダー(.h)ファイル
jar VALA.jar(Javaのラッパー)
libC/C++用のlibファイル
samples各種開発言語のサンプル
サンプルの実行前に参照設定などを行ってください。
無償評価版と共にダウンロードしたライセンスキーを bin/LicenseManager.exeを使って登録してください。

PDF文書の規格準拠検証

PDF文書が指定されたコンプライアンス(規格準拠)・レベルに準拠しているかを検証します。
準拠していない場合は、非準拠箇所などを出力します。

C# C/C++ ダウンロード
// Validator生成
pValidator = PdfValidatorCreateObject();

// 入力ファイルをコンプライアンス・レベルでオープン
if (!PdfValidatorOpen(pValidator, szInputPath, _T(""), iCompliance))
{
    _tprintf(_T("入力ファイル %s をオープンできません。 %s (エラーコード: 0x%08x)\n"),
        szInputPath, PdfValidatorGetErrorMessage(pValidator),
        PdfValidatorGetErrorCode(pValidator));
    iReturnValue = 1;
    goto cleanup;
}

// PDF文書を検証
// もし真ならば、PDF文書は指定されたコンプライアンス・レベルに準拠しています。
// そうでない場合は、コンプライアンス・レベルに準拠していないとして検証は中断されます。
if (!PdfValidatorValidate(pValidator))
{
    if (PdfValidatorGetErrorCode(pValidator) == PDF_E_CONFORMANCE)
    {
        _tprintf(_T("文書 %s はコンプライアンス・レベル %s に準拠していません。\n"),
            szInputPath, szCompliance);

        // コンプライアンス違反を出力
        pCurrError = PdfValidatorGetFirstError(pValidator);
        while (pCurrError != NULL)
        {
            int nBufSize = PdfValidatorErrorGetMessage(pCurrError, NULL, 0);
            TCHAR* szErrorBuff = malloc(nBufSize*sizeof(TCHAR));
            PdfValidatorErrorGetMessage(pCurrError, szErrorBuff, nBufSize);
            _tprintf(_T("ページ: %d, オブジェクト: %d, %s\n"), PdfValidatorErrorGetPageNo(pCurrError),
                PdfValidatorErrorGetObjectNo(pCurrError), szErrorBuff);
            pCurrError = PdfValidatorGetNextError(pValidator);
            free(szErrorBuff);
        }
    }
    else
    {
        _tprintf(_T("%s 検証を中断します。 %s (エラーコード: 0x%08x)\n"), szInputPath,
            PdfValidatorGetErrorMessage(pValidator), PdfValidatorGetErrorCode(pValidator));
    }
}
else
{
    _tprintf(_T("文書 %s は %s コンプライアンス・レベルに準拠しています。\n"), szInputPath, szCompliance);
}

// 入力ファイルをクローズ
PdfValidatorClose(pValidator);
C# C/C++ ダウンロード
// Validator生成
using (PdfValidator validator = new PdfValidator())
{
    // 入力ファイルをコンプライアンス・レベルでオープン
    if (!validator.Open(inputPath, "", complianceLevel))
        throw new Exception(String.Format("入力ファイル {0} をオープンできません。 " + 
            "{1} (エラーコード: 0x{2:x})", inputPath, validator.ErrorMessage, validator.ErrorCode));

    // PDF文書を検証
    // もし真ならば、PDF文書は指定されたコンプライアンス・レベルに準拠しています。
    // そうでない場合は、コンプライアンス・レベルに準拠していないとして検証は中断されます。

    if (!validator.Validate())
    {
        if (validator.ErrorCode == PDFErrorCode.PDF_E_CONFORMANCE)
        {
            Console.WriteLine("文書 {0} はコンプライアンス・レベル {1} に準拠していません。", inputPath, 
                compliance);

            // コンプライアンス違反を出力
            PdfError currError = validator.GetFirstError();
            while (currError != null)
            {
                Console.WriteLine("ページ: {0}, オブジェクト: {1}, {2}", currError.PageNo, 
                    currError.ObjectNo, currError.Message);
                currError = validator.GetNextError();
            }
        }
        else
            throw new Exception(String.Format("{0} 検証を中断します。 {1} " + 
                "(エラーコード: 0x{2:x})", inputPath, validator.ErrorMessage, validator.ErrorCode));
    }
    else
        Console.WriteLine("文書 {0} はコンプライアンス・レベル {1} に準拠しています。", inputPath, compliance);

    // 入力ファイルをクローズ
    validator.Close();
}Console.WriteLine("終了");

カスタムプロファイル(独自の規格)

PDF文書が企業独自の規格に準拠していることを確認します。 そのために、独自の検証プロファイルが含まれた構成ファイルを指定します。
プロファイルには、文書のページ数、グラフィック関連、フォント、署名、そして様々な独自の要件を指定します。

C# C/C++ ダウンロード
// Validator生成
pValidator = PdfValidatorCreateObject();

// 入力ファイルをオープン
if (!PdfValidatorOpen(pValidator, szInputPath, _T(""), ePDFA2b))
{
    _tprintf(_T("入力ファイル %s をオープンできません。 %s (エラーコード: 0x%08x)\n"),
        szInputPath, PdfValidatorGetErrorMessage(pValidator), PdfValidatorGetErrorCode(pValidator));
    iReturnValue = 1;
    goto cleanup;
}

// 独自の規格を指定
if (!PdfValidatorSetProfile(pValidator, szProfilePath))
{
    _tprintf(_T("独自の規格ファイル %s 指定失敗 %s (エラーコード: 0x%08x)\n"),
        szProfilePath, PdfValidatorGetErrorMessage(pValidator), PdfValidatorGetErrorCode(pValidator));
    iReturnValue = 1;
    goto cleanup;
}

// 文書を検証(ドキュメントがカスタムプロファイルで指定された要件を満たしているかどうかを確認)
bool isCompliant = PdfValidatorValidate(pValidator);

// クローズ 
PdfValidatorClose(pValidator);

// 結果
_tprintf(_T("文書はカスタムプロファイルで指定された要件を満たして%s。\n"), isCompliant ? _T("います") : _T("いません"));
C# C/C++ ダウンロード
// Validator生成
using (PdfValidator validator = new PdfValidator())
{
    // 入力ファイルをオープン
    if (!validator.Open(inputPath, "", PDFCompliance.ePDFA2b))
        throw new Exception(String.Format("入力ファイル {0} をオープンできません。 " + 
            "{1} (エラーコード: 0x{2:x})", inputPath, validator.ErrorMessage, validator.ErrorCode));

    // 独自の規格を指定
    if (!validator.SetProfile(profilePath))
        throw new Exception(String.Format("独自の規格ファイル {0} 指定失敗 " + 
            "{1} (エラーコード: 0x{2:x})", profilePath, validator.ErrorMessage, validator.ErrorCode));

    // 文書を検証(ドキュメントがカスタムプロファイルで指定された要件を満たしているかどうかを確認)
    bool isCompliant = validator.Validate();

    // クローズ 
    validator.Close();

    // 結果
    Console.WriteLine("文書はカスタムプロファイルで指定された要件を満たして{0}。", isCompliant ? "います" : "いません");
}

PDF文書のPDF/A-2b準拠検証

PDF文書がPDF/A-2b規格に準拠しているかを検証するサンプルです。

C# C/C++ ダウンロード
// Validator生成
pValidator = PdfValidatorCreateObject();

// 入力ファイルをPDF/A-2b規格でオープン
if (!PdfValidatorOpen(pValidator, szInputPath, _T(""), ePDFA2b))
{
    _tprintf(_T("入力ファイル %s をオープンできません。 %s (エラーコード: 0x%08x)\n"),
        szInputPath, PdfValidatorGetErrorMessage(pValidator), PdfValidatorGetErrorCode(pValidator));
    iReturnValue = 1;
    goto cleanup;
}

// 適合違反が見つかったら検証を停止します
PdfValidatorSetStopOnError(pValidator, 1);

// 文書を検証
bool isCompliant = PdfValidatorValidate(pValidator);

// クローズ
PdfValidatorClose(pValidator);

// 結果
_tprintf(_T("文書は PDF/A-2b 規格に準拠して%s。\n"), isCompliant ? _T("います") : _T("いません"));
C# C/C++ ダウンロード
// Validator生成
using (PdfValidator validator = new PdfValidator())
{
    // 入力ファイルをPDF/A-2b規格でオープン
    if (!validator.Open(inputPath, "", PDFCompliance.ePDFA2b))
        throw new Exception(String.Format("入力ファイル {0} をオープンできません。 " + 
            "{1} (エラーコード: 0x{2:x})", inputPath, validator.ErrorMessage, validator.ErrorCode));

    // 適合違反が見つかったら検証を停止します
    validator.StopOnError = true;

    // 文書を検証
    bool isCompliant = validator.Validate();

    // クローズ
    validator.Close();

    // 結果
    Console.WriteLine("文書は PDF/A-2b 規格に準拠して{0}", isCompliant ? "います" : "いません");
}

ご質問、お問い合わせ

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

PDF-Tools サンプル

PDF Toolsとは

PDF/Aとは