7.1.2 FDFを用いたPDFフォームデータのインポート

ImportFormFieldsFromFDF_Top

狙い・効果

フォームデータFDFファイルをPDFにインポート FDFファイルのFDFファイルフォームデータをPDFにインポートします。

処理の概要

FDFファイルに保存されているフォームデータをPDFにフォームを入力し、新規ファイルとして出力できます。

前項「7.1.1 FDFを用いたPDFフォームデータのエクスポート」で扱ったFDFファイルと組み合わせて使うこともできます。

サンプルプログラムでは、指定したFDFファイルのフォームデータをインポートして、入力PDFのフォームを入力して新規ファイルとして出力します。フォームフィールドの入力時にエラーが起こった項目がある場合は個数と内容を出力します。

『PDF Tool API』の主な機能

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

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

    public static void main(String[] args) {
        if (args.length < 3) {
            printUsage();
            return;
        }

        // コマンドライン引数の取得
        try (PtlParamInput inputFile = new PtlParamInput(args[0]);
             PtlParamOutput outputFile = new PtlParamOutput(args[1]);
             PtlParamInput FdfToImport = new PtlParamInput(args[2]);
             PtlPDFDocument doc = new PtlPDFDocument()) {
            // PDFファイルをロードします。
            doc.load(inputFile);

            try (PtlPages pages = doc.getPages()) {//ページコンテナの取得
                // ページコンテナが空かどうか
                if (pages.isEmpty()) {
                    System.out.println("ページコンテナが空です。処理を終了します。\n");
                    return;
                }
            }
            // FDFファイルからフォームフィールドデータをインポートする
            //(設定できなかったフォームフィールドの値を取得する)
            try(PtlFormFieldValues failedFormFieldValues = doc.importFormFieldsFromFDF(FdfToImport)) {
                getFailedFormFieldInfo(failedFormFieldValues);
                System.out.println("フォームフィールドデータをインポートしました。\n");
            }
            // ファイルに保存します。
            doc.save(outputFile);
        }
	...【GetPDFVersion.javaと同じ処理のため省略
	   ・エラーメッセージ処理と出力】...
    }


    private static void getFailedFormFieldInfo(PtlFormFieldValues formFieldValues)
                        throws PtlException, Exception, Error {
        int numOfFormFieldValues = formFieldValues.getCount();
        System.out.println("設定できなかったフォームフィールドの数は "
                            + numOfFormFieldValues
                            + " 個です。");
        //0個だった場合は処理を抜ける。
        if(numOfFormFieldValues == 0) {
            return;
        }

        System.out.println("設定できなかったフォームフィールドの情報を表示します。");
        System.out.println("---");

        // 0個でなかった場合は処理を続け、情報を得る
        for(int i = 0; i < numOfFormFieldValues; i++) {

            System.out.println("-");
            System.out.println("index No. "  + i);
            try(PtlFormFieldValue formFieldValue = formFieldValues.get(i)) {
                System.out.println("  フォームフィールド名 : "  + formFieldValue.getFieldName());
                System.out.println("  フォームフィールド値 : "  + formFieldValue.getValue());
            }
        }
        System.out.println("---");
    }
}

プログラムファイル名

ImportFormFieldsFromFDF.java

入出力操作の例

C:\samples>java cookbook.ImportFormFieldsFromFDF 
usage: java ImportFormFieldsFromFDF in-pdf-file out-pdf-file fdf-file-to-import

C:\samples>java cookbook.ImportFormFieldsFromFDF 備品貸出申し込み書_blank.pdf Output_ImportFormFieldsFromFDF.pdf Output_ExportFormFieldsToFDF.fdf 
設定できなかったフォームフィールドの数は 0 個です。
フォームフィールドデータをインポートしました。
-- 完了 --

この操作例では「7.1.1 FDFを用いたPDFフォームデータのエクスポート」でエクスポートしたFDFファイルを用いて空のPDFフォームにデータを入力しています。

5-7-1-2_ImportFormFieldsFromFDF_01_rawPDF5-7-1-2_ImportFormFieldsFromFDF_02_出力されたPDF
データ入力前のフォームPDF(拡大図)FDFファイルのデータがフォームフィールドに入力された出力PDF(拡大図)