4.1.5 画像の配置矩形を設定する

images/ImageToPdfSetRect-top.png

狙い・効果

画像からPDFページ作成時の配置矩形画像からPDFページ作成をする際に配置矩形とその中での配置方法を指定します。

処理の概要

PDFページ作成の際に、用紙サイズについて「画像サイズに合わせる」以外の設定がされている場合、ページ内で画像を配置する矩形と矩形内での配置方法を指定することができます。矩形をはみ出すようであれば矩形内で描画できるように画像が縮小されます。

本サンプルプログラムでは、入力画像ファイルを新しいPDFドキュメントとして出力します。ページサイズはA4縦(ポートレート)用紙で、画像の配置矩形と矩形内での配置方法を設定します。配置矩形はプログラム内で座標を指定し、配置方法の設定にはPtlParamImagePage.ALIGNの定数名をコマンドライン引数の文字列で指定します。

それ以外の設定・動作は「4.1.1 ページの作成」と同じです。

PDF Tool APIの主な機能

表4・3 画像の配置の種類
ALIGN_BOTTOM 中央下
ALIGN_BOTTOM_LEFT 左下
ALIGN_BOTTOM_RIGHT 右下
ALIGN_CENTER 中央(デフォルト値)
ALIGN_LEFT 中央左
ALIGN_RIGHT 中央右
ALIGN_TOP 中央上
ALIGN_TOP_LEFT 左上
ALIGN_TOP_RIGHT 右上

プログラム例

package cookbook;

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

public class ImageToPdfSetRect {

    // そのクラスのusageを表示する関数
    private static void printUsage() {
        System.out.println("usage: java ImageToPdfSetRect image-file" +
                           " out-pdf-file image-align");
        System.out.println("image-align : 画像の配置");
     }

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

        //コマンドライン引数の読み取り
        String AlignType = args[2];
        try (PtlParamOutput outputFile = new PtlParamOutput(args[1]);
             PtlPDFDocument doc = new PtlPDFDocument();  //PDF文書を表現したクラスを新規作成
             PtlPages pages = doc.getPages()) {  //作成したクラスのページコンテナの取得

            // 画像描画パラメータ
            // 画像ファイル
            // 画像ページパラメータ の取得
            try (PtlParamDrawImage paramDrawImage = new PtlParamDrawImage();
                 PtlParamInput inputImage = new PtlParamInput(args[0]);
                 PtlParamImagePage paramImagePage = new PtlParamImagePage();
                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
                // 画像の配置を設定
                try{
                    paramImagePage.setAlign(
                        PtlParamImagePage.ALIGN.valueOf(AlignType));
                }catch (IllegalArgumentException iaex){
                    //PtlParamImagePage.PAPER_TYPEの指定が誤っていた場合のエラーメッセージ
                    System.out.println(iaex.getMessage());
                    System.out.println("ERROR : [画像の配置]には" +
                                       "PtlParamImagePage.ALIGNに" +
                                       "含まれる名前を指定してください。");
                    iaex.printStackTrace();
                }
                //画像の配置矩形を設定
                paramImagePage.setRect(setRectCoordinate(br));

                // 画像描画パラメータに画像ファイルを設定
                paramDrawImage.setImageStream(inputImage);
                // 画像ページパラメータに画像描画パラメータを設定
                paramImagePage.setImage(paramDrawImage);
                // 画像ページのサイズを画像サイズにあわせる
                paramImagePage.setPaperType(PtlParamImagePage.PAPER_TYPE.PAPER_A4);
                // ページコンテナに画像ページパラメータを追加
                pages.append(paramImagePage);
            }

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

    /**
     * 矩形の各値を入力してその座標値をもつ矩形を返す関数。
     * 原点はPDFの左下端。
     * bottomよりtopが大きい、leftよりもrightが大きいなどの矛盾した数値は入力できない。
     * 
     * @param br BufferedReader。数値の読み取りに使う。
     * @return 指定したleft, bottom, right, topの数値を持つPtlRect
     */
    public static PtlRect setRectCoordinate(BufferedReader br)
        throws IOException, PtlException, Exception, Error
    {
	...【AppendAnnotLink.javaと同じ処理のため省略】...
    }
}

プログラムファイル名

ImageToPdfSetRect.java

入出力操作の例

C:\samples>java cookbook.ImageToPdfSetRect 
usage: java ImageToPdfSetRect image-file out-pdf-file image-align
image-align : 画像の配置

C:\samples>java cookbook.ImageToPdfSetRect fileformat.png imagetopdf-rect.pdf ALIGN_CENTER  
配置矩形の各数値を入力してください。
top (mm) : 287
bottom (mm) : 10
left (mm) : 20
right (mm) : 190
-- 完了 --

A4用紙中央に左上(20, 287)、右下(190, 20)の矩形を置き、その中に画像を配置しています。

画像の配置矩形を設定する