角度指定レイヤーを設定する際に任意の角度に傾けて描画します。
レイヤーを設定する際に任意の角度を指定して傾けることができます。
PtlParamDrawLayer.setAngle()を呼び出すことで指定します。角度は度数法で表し、反時計回りに指定した角度の分だけ傾きます。
90度刻みで指定するsetRotate()とは異なり、小数を含む任意の細かい角度に指定することが可能です。 PtlParamDrawLayerで角度以外の要素を指定する場合、他の関数よりも先に角度を設定する必要があります。(レイヤー機能及びレイヤーの設定に関する詳細は「『PDF CookBook』(第3巻)6. レイヤー作成」の各項を参照してください)
サンプルプログラムでは、入力PDFに指定したPDFをレイヤーとして挿入します。このとき、引数で指定した角度に傾けて挿入します。
package cookbook; import jp.co.antenna.ptl.*; public class DrawLayerSetFreeAngle { // そのクラスのusageを表示する関数 private static void printUsage() { System.out.println("usage: java DrawLayerSetFreeAngle in-pdf-file" + " out-pdf-file page-num insert-pdf-file" + " page-num-to-insert free-angle"); System.out.println("free-angle:"); System.out.println("回転する角度。任意の数値で指定。"); } /** * @param args the command line arguments */ public static void main(String[] args) { if (args.length < 5) { printUsage(); // usageメッセージの表示 return; } try (PtlParamInput inputFile = new PtlParamInput(args[0]); PtlParamOutput outputFile = new PtlParamOutput(args[1]); PtlPDFDocument doc = new PtlPDFDocument()) { // PDFファイルをロードします。 doc.load(inputFile); //コマンドライン引数の取得 int pageToAdd = Integer.parseInt(args[2]); int numPages = doc.getPageCount(); System.out.println("ページ数:" + numPages); if((numPages < 0)||(numPages < pageToAdd)) { System.err.println("page-numは入力PDFの全ページ数よりも小さい正の値を" + "指定してください。"); printUsage(); return; } String insertPDFPath = args[3]; int insertPageNum = Integer.parseInt(args[4]); float angle = Float.parseFloat(args[5]); try (PtlPages pages = doc.getPages()) { // ページコンテナの取得 // ページコンテナが空かどうか if (pages.isEmpty()) { System.out.println("ページコンテナが空"); return; } // 書き込み先ページを取得(パラメータindexは0が先頭のため1を引く) try (PtlPage page = pages.get(pageToAdd - 1)) { //レイヤーの描画 drawLayerSetFreeAngle(page, insertPDFPath, insertPageNum, angle); } } // ファイルに保存します。 doc.save(outputFile); } ...【GetPDFVersion.javaと同じ処理のため省略 ・エラーメッセージ処理と出力】... } public static void drawLayerSetFreeAngle(PtlPage page, String insertPDFPath, int insertPageNum, float angle) throws PtlException, Exception, Error { try (PtlSize pageSize = page.getSize(); // ページサイズ PtlContent content = page.getContent(); // ページコンテントの取得 PtlPDFDocument docToInsert = new PtlPDFDocument(); //挿入するPDF PtlParamInput inputFileToInsert = new PtlParamInput(insertPDFPath); // 描画矩形の指定(PDFいっぱいに指定) PtlRect rect = new PtlRect(0.0f, 0.0f, pageSize.getWidth(), pageSize.getHeight())) { // PDFファイルをロードします。 docToInsert.load(inputFileToInsert); try (PtlPages pagesToInsert = docToInsert.getPages()) { // ページコンテナの取得 // ページコンテナが空かどうか if (pagesToInsert.isEmpty()) { System.out.println("ページコンテナが空"); return; } // ページの取得(パラメータindexは0が先頭のため1を引く) // レイヤーのパラメーターの取得 try (PtlPage pageInsert = pagesToInsert.get(insertPageNum - 1); PtlParamDrawLayer param = new PtlParamDrawLayer()) { // レイヤーの回転角度を指定 param.setAngle(angle); // レイヤーにするページ param.setPage(pageInsert); // レイヤーの名前 param.setName("挿入したレイヤー(前面)"); // レイヤーを前面に param.setZorder(PtlParamDrawLayer.ZORDER.ZORDER_FRONT); // レイヤーを表示 param.setShow(PtlParamDrawLayer.SHOW.SHOW_ON); // レイヤーの描画 content.drawLayer(rect, PtlContent.ALIGN.ALIGN_CENTER, param); } } } } }
DrawLayerSetFreeAngle.java
C:\samples>java cookbook.DrawLayerSetFreeAngle usage: java DrawLayerSetFreeAngle in-pdf-file out-pdf-file page-num insert-pdf-file page-num-to-insert free-angle free-angle: 回転する角度。任意の数値で指定。 C:\samples>java cookbook.DrawLayerSetFreeAngle novelText.pdf Output_DrawLayerSetFreeAngle.pdf 1 AHLogo.pdf 1 45 ページ数:2 -- 完了 --
この操作例では入力PDF「novelText.pdf」(図10.6 左)に、アンテナハウスのロゴPDFを「挿入したレイヤー(前面)」(図10.6 右)として、角度を45度に指定して挿入し、PDFを出力しています(図10.7)。
出力PDFを開くと、ページ上で45度にロゴが傾いていること、レイヤー表示では「挿入したレイヤー(前面)」レイヤーが確認できます。