2.2.1 PDF/A-1b、PDF/A-2bへの変換

FixUpPDFA_Top

狙い・効果

入力PDFをPDF/APDF/Aへ変換します。

処理の概要

変換できるPDF/AのバージョンはPDF/A-1bまたはPDF/A-2bです。

変換時に準拠エラーが発生した場合は処理を停止し、PtlPDFFixUpError形式のエラーを出力します。

参考

PtlPDFFixUpError形式のエラー詳細は本書「付録:PtlPDFFixUpErrorのエラーコード一覧」、クラスPtlPDFFixUpErrorの扱いや詳細については「2.2.1 PDF/A-1b,PDF/A-2bの準拠確認」をご覧ください。

サンプルプログラムでは入力したPDFをPDF/A変換し、指定した名前で出力します。変換するバージョンは引数で指定します。

コンソール上に、変換時に発生した準拠エラーの有無またはエラーの総数とそれらのエラーコードを表示します。

『PDF Tool API』の主な機能

ここでは主に次の機能を使っています。

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class FixUpPDFA {

    // そのクラスのusageを表示する関数
    public static void printUsage() {
        System.out.print("usage: java FixUpPDFA in-pdf-file out-pdf-file");
        System.out.println(" PDF/Aの種類 \n");
        System.out.println("PDF/Aの種類");
        System.out.println("1 : PDF/A-1b  2 : PDF/A-2b");
    }

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

        int kind;
        try {
            kind =  Integer.parseInt(args[2]);
            switch (kind) {
            case 1:
            case 2:
                break;
            default:
                System.out.println("PDF-Aの種類には、1または2の数値を指定してください。");
                printUsage(); // usageメッセージの表示
                return;
            }
        }
        catch(NumberFormatException numfe) {
            System.out.println("PDF-Aの種類には、1または2の数値を指定してください。");
            printUsage(); // usageメッセージの表示
            return;
        }
        // コマンドライン引数の取得
        try (PtlParamInput inputFile = new PtlParamInput(args[0]);
             PtlParamOutput outputFile = new PtlParamOutput(args[1]);
             PtlPDFFixUp fixUp = new PtlPDFFixUp()) {

            // PDFFixUPでinputFileをPDF/Aにする。
            switch (kind) {
            case 1: //PDF/A-1b
                fixUp.fixUpPDFA(PtlPDFFixUp.PDFA_TYPE.PDFA_1B, inputFile);
                break;
            case 2:
                // PDF/A-2b
                fixUp.fixUpPDFA(PtlPDFFixUp.PDFA_TYPE.PDFA_2B, inputFile);
                break;
            }

            //変換エラー発生チェック
            try(PtlPDFFixUpErrors fixUpErrors = fixUp.getErrors()) {
                int numErrors = fixUpErrors.getCount();
                System.out.println("変換時の総エラー数 : " + numErrors);

                if(numErrors == 0){
                    System.out.println("エラーは発生しませんでした。");
                }else {
                    for(int i = 0; i < numErrors; i++) {

                        try(PtlPDFFixUpError thisFixUpError = fixUpErrors.get(i)){
                            System.out.println("エラーその"+ i +":"+ thisFixUpError.getErrorMessageJP());
                        }
                    }
                }
            }

            // ファイルに保存します。
            fixUp.save(outputFile);
        }
	...【GetPDFVersion.javaと同じ処理のため省略
	   ・エラーメッセージ処理と出力】...
    }
}

プログラムファイル名

FixUpPDFA.java

入出力操作の例

C:\samples>java cookbook.FixUpPDFA 
usage: java FixUpPDFA in-pdf-file out-pdf-file PDF/Aの種類 

PDF/Aの種類
1 : PDF/A-1b  2 : PDF/A-2b

C:\samples>java cookbook.FixUpPDFA testPages_10.pdf Output_FixupPDFA-1b.pdf 1 
変換時の総エラー数 : 0
エラーは発生しませんでした。
-- 完了 --

C:\samples>java cookbook.FixUpPDFA testPages_10.pdf Output_FixupPDFA-2b.pdf 2 
変換時の総エラー数 : 0
エラーは発生しませんでした。
-- 完了 --

この操作例ではPDF/A-1b、PDF/A-2bをそれぞれ出力しています。

5-2-1-1_PDF_A_1b_002

図2.1 PDF/A-2bへの変換例。Adobe Acrobat上の準拠チェックで「確認成功」と出ている