原点の位置と座標の単位を変更して表示の変化を確認します。
原点の位置は左下原点と左上原点を選択でき、y軸の正が表す方向を変更できます。左下原点を指定するとページ右に行くほどx座標が大きい座標軸がとられ、ページ上にいくほどy座標が大きくなります。左上原点を指定するとページ右に行くほどx座標が大きく、ページ下にいくほどy座標が大きくなります。
(注意:左上原点を指定した場合、上下の扱いが左下原点とは異なることに注意してください。例えば矩形の座標指定で上座標のy座標に下座標のy座標よりも大きい数値を指定してしまった場合、上座標の方が下座標よりもページ下方にある指定をしてしまったことによるエラーが起こります。)
座標の単位について、通常はmm単位で座標を扱いますが、座標の単位を変更することによりポイント単位で座標を指定できます。
デフォルトでは、左下原点、mm単位が指定されています。
本サンプルプログラムでは、原点の位置・座標の単位を様々に設定した上で、入力PDFの1ページ目の座標(50, 50)から座標(100, 100)に直線を描画して表示の違いを確かめます。
package cookbook; import java.io.*; import jp.co.antenna.ptl.*; public class SetCoordinateOriginAndUnit{ // そのクラスのusageを表示する関数 private static void printUsage() { System.out.println("usage: java SetCoordinateOriginAndUnit input-pdf-file" + " out-pdf-file 原点の位置 座標の単位"); System.out.println("原点の位置 : "); System.out.println("0: 左下(デフォルト値) 1: 左上"); System.out.println("座標の単位 : "); System.out.println("0: mm(デフォルト値) " + "1: ポイント"); } /** * @param args the command line arguments */ public static void main(String[] args) { if (args.length < 4) { printUsage(); return; } //コマンドライン引数の読み取り int originType = Integer.parseInt(args[2]); int unitType = Integer.parseInt(args[3]); // コマンドライン引数の判定 if((originType < 0) || (1 < originType)){ System.out.println("原点の位置 は0か1で指定して下さい。"); printUsage(); return; } if((unitType < 0) || (1 < unitType)){ System.out.println("座標の単位 は0か1で指定して下さい。"); printUsage(); return; } try (PtlParamInput inputFile = new PtlParamInput(args[0]); PtlParamOutput outputFile = new PtlParamOutput(args[1]); PtlPDFDocument doc = new PtlPDFDocument(); PtlOption coordOption = new PtlOption()) { // PDFファイルをロードします。 doc.load(inputFile); // 原点の位置の指定 switch(originType) { case 0: //左下(デフォルト値) coordOption.setOrigin(PtlOption.ORIGIN.ORIGIN_BOTTOM_LEFT); break; case 1: // 左上 coordOption.setOrigin(PtlOption.ORIGIN.ORIGIN_TOP_LEFT); break; } // 原点の単位の指定 switch(unitType) { case 0: //mm(デフォルト値) coordOption.setUnit(PtlOption.UNIT.UNIT_MM); break; case 1: // PT coordOption.setUnit(PtlOption.UNIT.UNIT_PT); break; } try (PtlPages pages = doc.getPages()) //ページコンテナの取得 { // ページコンテナが空かどうか if (pages.isEmpty()) { System.err.println("ページコンテナが空"); return; } // ページの取得(パラメータindexは0が先頭のため1を引く) // ページコンテントの取得 // 直線の始点を(50,50)で指定 // 直線の終点を(100, 100)で指定 // 文字描画のパラメータクラス。今回は何も設定しない。 try (PtlPage page = pages.get(0); PtlContent content = page.getContent(); PtlPoint point5050 = new PtlPoint(50, 50); PtlPoint point100100 = new PtlPoint(100, 100); PtlParamDrawShape paramDrawShape = new PtlParamDrawShape()) { // 直線を描画 content.drawLine(point5050, point100100, paramDrawShape); } } // ファイルに保存します。 doc.save(outputFile); } ...【AppendAnnotStampDefault.javaと同じ処理のため省略 ・エラーメッセージ処理と出力】... } }
SetCoordinateOriginAndUnit.java
C:\samples>java cookbook.SetCoordinateOriginAndUnit usage: java SetCoordinateOriginAndUnit input-pdf-file out-pdf-file 原点の位置 座標の単位原点の位置 : 0: 左下(デフォルト値) 1: 左上 座標の単位 : 0: mm(デフォルト値) 1: ポイント C:\samples>java cookbook.SetCoordinateOriginAndUnit setopenmode.pdf savecoordinate-00.pdf 0 0 -- 完了 -- C:\samples>java cookbook.SetCoordinateOriginAndUnit setopenmode.pdf savecoordinate-01.pdf 0 1 -- 完了 -- C:\samples>java cookbook.SetCoordinateOriginAndUnit setopenmode.pdf savecoordinate-10.pdf 1 0 -- 完了 -- C:\samples>java cookbook.SetCoordinateOriginAndUnit setopenmode.pdf savecoordinate-11.pdf 1 1 -- 完了 --