角度指定PDFのページを他のPDFに貼り付ける際に任意の角度を指定します。
PDF文書のページを他のPDF文書のページに貼り付けて描画する際に任意の角度をつけることができます。角度は度数法の数値で指定し、反時計回りに回転します。(PDFページの貼り付けに関する詳細及びその他の機能は「『PDF CookBook』(第1巻)2.3 PDFページを描画」の各項を参照してください)
サンプルプログラムでは、入力PDFに指定したPDFの指定したページを挿入します。このとき、引数で指定した角度に傾けて挿入します。
package cookbook; import java.io.*; import jp.co.antenna.ptl.*; public class AddPdfOnPageSetAngle { // そのクラスのusageを表示する関数 public static void printUsage() { System.out.print("usage: java AddForm in-pdf-file out-pdf-file"); System.out.println("page-num insert-pdf-file insert-page-num align angle"); } /** * @param args the command line arguments */ public static void main(String[] args) { if (args.length < 7) { printUsage(); // usageメッセージの表示 return; } try (PtlParamInput inputFile = new PtlParamInput(args[0]); PtlParamOutput outputFile = new PtlParamOutput(args[1]); PtlPDFDocument doc = new PtlPDFDocument(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { // PDFファイルをロードします。 doc.load(inputFile); //コマンドライン引数の取得 int pageToAdd = Integer.parseInt(args[2]); String insertPdfURI = args[3]; int insertPageNum = Integer.parseInt(args[4]); String align = args[5]; float angle = Float.parseFloat(args[6]); // pageToAddの判定 int numPages = doc.getPageCount(); System.out.println("ページ数:" + numPages); if((numPages < 0)||(numPages < pageToAdd)) { System.err.println("page-numは入力PDFの全ページ数よりも小さい正の値を" + "指定してください。"); printUsage(); return; } try (PtlPages pages = doc.getPages()) { // ページコンテナの取得 // ページコンテナが空かどうか if (pages.isEmpty()) { System.out.println("ページコンテナが空"); return; } // 書き込み先ページを取得(パラメータindexは0が先頭のため1を引く) try (PtlPage page = pages.get(pageToAdd - 1)) { //フォーム(PDFのページ)の描画 drawFormSetAngle(page, insertPdfURI, insertPageNum, align, angle, br); } } // ファイルに保存します。 doc.save(outputFile); } ...【GetPDFVersion.javaと同じ処理のため省略 ・エラーメッセージ処理と出力】... } public static void drawFormSetAngle(PtlPage page, String insertPdfURI, int insertPageNum, String align, float angle, BufferedReader br) throws PtlException, Exception, Error { try(PtlContent content = page.getContent();// 挿入先ページコンテントの取得 PtlParamInput insertPdf = new PtlParamInput(insertPdfURI); // 挿入PDF指定に使うパラメータクラス PtlPDFDocument docToInsert = new PtlPDFDocument(); // 挿入PDFの実体 PtlRect outputRect = new PtlRect()) {// 出力矩形の設定(setOutputRectを用いて初期化) docToInsert.load(insertPdf); int numPages = docToInsert.getPageCount(); if((numPages < 0)||(numPages < insertPageNum)) { System.err.println("insert-page-numは挿入するPDFの全ページ数よりも小さい正の値を指定してください。"); System.out.println("挿入PDFページ数:" + numPages); return; } try(PtlPages pagesToInsert = docToInsert.getPages(); PtlPage pageToInsert = pagesToInsert.get(insertPageNum - 1); PtlParamDrawForm formInsert = new PtlParamDrawForm()) { try { // ページの取得(パラメータindexは0が先頭のため1を引く) formInsert.setPage(pageToInsert); formInsert.setAngle(angle); // 指定ページの挿入 content.drawForm(setRectCoordinate(br,outputRect), PtlContent.ALIGN.valueOf(align), formInsert); } catch (IllegalArgumentException ex) {//PtlContent.ALIGNの指定が誤っていた場合のエラーメッセージ System.out.println(ex.getMessage()); System.out.println("ERROR : alignにはPtlContent.ALIGNに含まれる名前を指定してください。"); ex.printStackTrace(); } } } } public static PtlRect setRectCoordinate(BufferedReader br, PtlRect outputRect) throws IOException, PtlException, Exception, Error { float top, bottom, left, right; boolean isValueOkay = false; while(!isValueOkay) { System.out.println("配置矩形の各数値を入力してください。"); System.out.print("top (mm) : "); top = Float.parseFloat(br.readLine()); System.out.print("bottom (mm) : "); bottom = Float.parseFloat(br.readLine()); if(top < bottom) //不正矩形は再入力させる { System.out.println("topの値はbottomよりも大きい値を指定して再度入力してください。"); continue; } System.out.print("left (mm) : "); left = Float.parseFloat(br.readLine()); System.out.print("right (mm) : "); right = Float.parseFloat(br.readLine()); if(right < left) //不正矩形は再入力させる { System.out.println("rightの値はleftよりも大きい値を指定して再度入力してください。"); continue; } //矩形を正しく指定できた場合の処理 isValueOkay = true; outputRect.setLeft(left); outputRect.setBottom(bottom); outputRect.setRight(right); outputRect.setTop(top); } return outputRect; } }
AddPdfOnPageSetAngle.java
C:\samples>java cookbook.AddPdfOnPageSetAngle usage: java AddForm in-pdf-file out-pdf-filepage-num insert-pdf-file insert-page-num align angle C:\samples>java cookbook.AddPdfOnPageSetAngle novelText.pdf Output_AddPdfOnPageSetAngle.pdf 1 AHLogo.pdf 1 ALIGN_CENTER 45 ページ数:2 指定する矩形の各数値を入力してください。 top (mm) : 250 bottom (mm) : 10 left (mm) : 10 right (mm) : 190 -- 完了 --
この操作例では左下頂点(10mm, 10mm)、右上頂点(250mm, 190mm)の矩形に45度傾けたPDFページが挿入されます。
挿入されるPDFページはアンテナハウスロゴのベクター画像です。