4.3.1 既存PDFへ画像から作成したページを挿入する

images/InsertImagePage-top.png

狙い・効果

既存のPDFに対し、画像から生成したページを追加画像ファイルから生成した新規ページを追加します。

処理の概要

画像から変換した新規ページはその他のPDFのページと同様に処理することで既存のPDFに挿入できます。

本サンプルプログラムでは、画像ファイルから生成した新規ページを入力PDFの指定した位置にPages.insert()メソッドを用いて追加します。挿入位置や画像ファイルについてはコマンドライン引数で指定します。ページサイズはA4で、画像は上下20mm、左右15mmのマージンを確保した状態でページ左上に配置されます。

PDF Tool APIの主な機能

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class InsertImagePage {

    // そのクラスのusageを表示する関数
    private static void printUsage() {
        System.out.println("usage: java InsertImagePage in-pdf-file" +
                           " out-pdf-file insert-image-file page-to-insert" +
                           " [multi-tiff-page]");
        System.out.println("page-to-insert : ");
        System.out.println("0 : 先頭ページに挿入 それ以外:そのページ番号の後ろに挿入");
        System.out.println("[multi-tiff-page] : マルチTiffページ番号の設定" +
                           " (マルチページTiff挿入時未設定なら全ページを挿入)");
        System.out.println("-1 : 全ページを挿入 それ以外:ページ番号");
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 4) {
            printUsage();
            return;
        }
        // コマンドライン引数の読み取り(マルチページTIFFのページ指定)
        int pageNumOfTiff = -1;
        if (args.length == 5) {
            pageNumOfTiff = Integer.parseInt(args[4]);
        }
        try (PtlParamInput inputFile = new PtlParamInput(args[0]);
             PtlParamOutput outputFile = new PtlParamOutput(args[1]);
             PtlPDFDocument doc = new PtlPDFDocument()) {
            // PDFファイルをロードします。
            doc.load(inputFile);

            // 挿入ページ指定の判定
            int pageToInsert = Integer.parseInt(args[3]);
            int numPages = doc.getPageCount();
            System.out.println("ページ数:" + numPages);
            if((numPages < 0)||(numPages < pageToInsert))
            {
                System.err.println("挿入したいページは全ページ数以下で" +
                                   "0より大きい値を指定してください。");
                return;
            }
            // 画像描画パラメータ
            // 画像ファイル
            // 画像ページパラメータ の取得
            try (PtlPages pages = doc.getPages()) { // ページコンテナの取得

                try (PtlParamDrawImage paramDrawImage = new PtlParamDrawImage();
                     PtlParamInput inputImage = new PtlParamInput(args[2]);
                     PtlParamImagePage paramImagePage = new PtlParamImagePage()) {
                    // 画像描画パラメータに画像ファイルを設定
                    paramDrawImage.setImageStream(inputImage);

                    // マルチTiffのページ番号の設定(Tiffファイルにのみ有効) 
                    // -1を設定すると全ページを挿入します。
                    // 設定しない場合は、-1が設定されたとみなします
                    paramDrawImage.setImagePageNumber(pageNumOfTiff);

                    // 画像ページパラメータに画像描画パラメータを設定
                    paramImagePage.setImage(paramDrawImage);

                    // 画像ページのサイズをA4にする
                    paramImagePage.setPaperType(PtlParamImagePage.PAPER_TYPE.PAPER_A4);

                    // 画像を配置するときの余白の設定
                    paramImagePage.setMargin(20.0f, 15.0f, 20.0f, 15.0f);

                    // 画像の配置の設定 ALIGN_TOP_LEFT = 1, // 左上 
                    paramImagePage.setAlign(PtlParamImagePage.ALIGN.ALIGN_TOP_LEFT);

                    // ページコンテナに画像ページパラメータを追加
                    // insert()のパラメータindexは0が先頭のため1を引く
                    pages.insert(pageToInsert , paramImagePage);
                }
            }
            // ファイルに保存します。
            doc.save(outputFile);
        }
	...【AppendAnnotStampDefault.javaと同じ処理のため省略
	  ・エラーメッセージ処理と出力】...
    }
}

プログラムファイル名

InsertImagePage.java

入出力操作の例

C:\samples>java cookbook.InsertImagePage 
usage: java InsertImagePage in-pdf-file out-pdf-file insert-image-file page-to-insert [multi-tiff-page]
page-to-insert : 
0 : 先頭ページに挿入 それ以外:そのページ番号の後ろに挿入
[multi-tiff-page] : マルチTiffページ番号の設定 (マルチページTiff挿入時未設定なら全ページを挿入)
-1 : 全ページを挿入 それ以外:ページ番号

C:\samples>java cookbook.InsertImagePage blank.pdf insertimage.pdf ahlogo_mono.bmp 0 
ページ数:1
-- 完了 --