10.3.2 作成日時・更新日時の有効性を確認して取得する

GetDocInfoWithValidationDate_Top

狙い・効果

PDFに設定された日付更新日付・作成日付の有効性を確認しながら取得します。

処理の概要

PtlDate.isValid()はPDFから取得した日時の有効性チェックにも使用できます。

PDFに作成日時や更新日時が設定されていなかった場合、そのPDFから作成日時や更新日時を取得しようとしても無効な日付を取得してしまいます。

例えば取得した作成日時を別のPDFの作成日時にコピーしようと設定不可能な値を無理に処理すると、プログラムはエラーコード200[Invalid parameter value]の例外を起こして停止します。

そこで、getCreationDateやgetModDateで取得したPtlDateに対してPtlDate.isValid()を実行することで無効な日付データを処理してしまうのを未然に防ぎます。

サンプルプログラムでは、入力PDFのプロパティから作成日時・更新日時を読み取って表示します。この際、取得した日時が有効なものかどうかを判定し、無効な日時だった場合は日付ではなく無効であった旨を表示します。

『PDF Tool API』の主な機能

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class GetDocInfoWithValidationDate {

    // そのクラスのusageを表示する関数
    private static void printUsage() {
        System.out.println("usage: java GetDocInfoWithValidationDate in-pdf-file");
     }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 1) {
            printUsage();
            return;
        }

        try (PtlParamInput inputFile = new PtlParamInput(args[0]);
             PtlPDFDocument doc = new PtlPDFDocument()) {
            // PDFファイルをロード
            doc.load(inputFile);

            try (PtlDocProperty docProperty = doc.getDocProperty(); //PDFの文書プロパティ
                 PtlDocInfo docinf = docProperty.getDocInfo()) {    //PDFの文書情報
                // 作成日付を取得
                try (PtlDate dateCreate = docinf.getCreationDate()) {
                    if(dateCreate.isValid()){ //CreationDateの有効性チェック
                        System.out.println("CreationDate : "
                            + dateCreate.getYear()
                            + "/" + dateCreate.getMonth()
                            + "/" + dateCreate.getDay()
                            + " " + dateCreate.getHour()
                            + ":" + dateCreate.getMin()
                            + ":" + dateCreate.getSec());
                    }else{
                        System.out.println("このPDFは有効なCreationDateを持っていません");
                    }
                }

                // 更新日付を取得
                try (PtlDate dateMod = docinf.getModDate()) {
                    if(dateMod.isValid()){
                        System.out.println("ModDate : "
                            + dateMod.getYear()
                            + "/" + dateMod.getMonth()
                            + "/" + dateMod.getDay()
                            + " " + dateMod.getHour()
                            + ":" + dateMod.getMin()
                            + ":" + dateMod.getSec());
                    }else{
                        System.out.println("このPDFは有効なModDateを持っていません。");
                    }
                }
            }
        }
	...【GetPDFVersion.javaと同じ処理のため省略
	   ・エラーメッセージ処理と出力】...
    }
}

プログラムファイル名

GetDocInfoWithValidationDate.java

入出力操作の例

C:\samples>java cookbook.GetDocInfoWithValidationDate 
usage: java GetDocInfoWithValidationDate in-pdf-file

C:\samples>java cookbook.GetDocInfoWithValidationDate sample_withNullDate.pdf 
このPDFは有効なCreationDateを持っていません
ModDate : 2024/1/10 16:29:28
-- 完了 --

この操作例では入力PDFに作成日が登録されていないPDFを使用しています。このPDFを読み込ませるとCreation Dateが不正になるため有効なCreation Dateを持っていないというメッセージが表示されます。

5-10-3-2_GetDocInfoWithValidationDate

図10.4 入力PDFのプロパティ。このPDFは作成日が登録されていない