3.1.3 添付ファイルの書き出し

images/OutputEmbeddedFile-top.png

狙い・効果

PDFの添付ファイルを書き出しPDFファイルに添付されているファイルを書き出します。

処理の概要

PDFドキュメントに埋め込まれた添付ファイルを書き出すことができます。

出力の際はPDFドキュメントの出力と同じようにファイル名を指定します。このとき、出力先のパスを指定することもできます。

本サンプルプログラムでは、書き出す先のファイル名及びパスを指定し、添付ファイルが埋め込まれた入力PDFから、指定したインデックス番号の添付ファイルを書き出します。

PDFファイルから添付ファイルを書き出す際の手順は以下の通りです。まず、そのPDFドキュメントが持っている添付ファイルのコンテナを取得します。その後、添付ファイルのコンテナから各添付ファイルを表すクラスを取得し、writeFile()メソッドを実行します。

PDF Tool APIの主な機能

プログラム例

package cookbook;

import java.io.*;
import jp.co.antenna.ptl.*;

public class OutputEmbeddedFile {

    // そのクラスのusageを表示する関数
    private static void printUsage() {
        System.out.println("usage: java OutputEmbeddedFile in-pdf-file" +
                           " index-num-of-embedded-file write-file-name");
        System.out.println("index-num-of-embedded-file : " +
                           "何番目の添付ファイルを取り出すか指定する。(1~)");
     }

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

        //コマンドライン引数の読み取り
        int indexOfFile = Integer.parseInt(args[1]);
        String writeFileName = args[2];

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

            // 添付ファイルコンテナの取得
            try (PtlEmbeddedFiles embeddedFiles = doc.getEmbeddedFiles()) {
                // 添付ファイルコンテナが空かどうか
                if (embeddedFiles.isEmpty()) {
                    System.out.println("添付ファイルコンテナは空");
                    return;
                }

                // 添付ファイル数の取得
                int numOfEmbeddedFiles = embeddedFiles.getCount();
                System.out.println("添付ファイル数 : " + numOfEmbeddedFiles);

                // indexで指定した添付ファイルの取得。
                if(indexOfFile < numOfEmbeddedFiles){
                    System.out.println("index-num-of-embedded-fileは" +
                                       "添付ファイルの数より少ないものを" +
                                       "指定してください。");
                    return;
                }
                // 添付ファイルの書き出し
                // get()メソッドのパラメータindexは0スタートのため、
                // numToDeleteから-1しています。
                try (PtlEmbeddedFile embeddedfile = embeddedFiles.get(indexOfFile -1)) {
                    System.out.println(indexOfFile + "番目の添付ファイル名 : " +
                                       embeddedfile.getFileName());

                    // 添付ファイルの書き出し
                    System.out.println(indexOfFile +
                                       "番目の添付ファイルの書き出しをします。");
                    System.out.println("書き出しファイル名 : " + writeFileName);
                    embeddedfile.writeFile(writeFile);
                }
            }
        }
	...【AppendAnnotStampDefault.javaと同じ処理のため省略
	  ・エラーメッセージ処理と出力】...
    }
}

プログラムファイル名

OutputEmbeddedFile.java

入出力操作の例

C:\samples>java cookbook.OutputEmbeddedFile  
usage: java OutputEmbeddedFile in-pdf-file index-num-of-embedded-file write-file-name
index-num-of-embedded-file : 何番目の添付ファイルを取り出すか指定する。(1~)

C:\samples>java cookbook.OutputEmbeddedFile embeds.pdf 1 thepdf.pdf 
添付ファイル数 : 1
1番目の添付ファイル名 : thepdf402.pdf
1番目の添付ファイルの書き出しをします。
書き出しファイル名 : thepdf.pdf
-- 完了 --