画像からPDFページ作成時の配置矩形画像からPDFページ作成をする際に配置矩形とその中での配置方法を指定します。
PDFページ作成の際に、用紙サイズについて「画像サイズに合わせる」以外の設定がされている場合、ページ内で画像を配置する矩形と矩形内での配置方法を指定することができます。矩形をはみ出すようであれば矩形内で描画できるように画像が縮小されます。
本サンプルプログラムでは、入力画像ファイルを新しいPDFドキュメントとして出力します。ページサイズはA4縦(ポートレート)用紙で、画像の配置矩形と矩形内での配置方法を設定します。配置矩形はプログラム内で座標を指定し、配置方法の設定にはPtlParamImagePage.ALIGNの定数名をコマンドライン引数の文字列で指定します。
それ以外の設定・動作は「4.1.1 ページの作成」と同じです。
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)の矩形を置き、その中に画像を配置しています。