
PDF文書のページ上に直線を描画します。
PDF文書の中で、直線を描くページ位置を指定します。
指定したページを読み込みます。
線の開始位置と終了位置を指定します。
線の属性を指定します。属性は本巻「2.4 図形描画」にあるものから指定できます。
直線を書き込み、加工したPDF文書を保存します。
線スタイル・線幅については本巻「2.4 図形描画」を参照してください。
package cookbook;
import java.io.*;
import jp.co.antenna.ptl.*;
public class AddLine {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
if (args.length < 9)
{
System.out.println("usage: java AddLine in-pdf-file out-pdf-file page-num line-style line-width colorR colorG colorB opacity");
System.out.println("line-style:\n 0: 実線, 1: 破線");
System.out.println("line-width:\n 0: 細い, 1: 中, 2:太い");
return;
}
// line-styleの判定
int lineStyle = Integer.parseInt(args[3]);
switch(lineStyle){
case 0:
case 1:
break;
default :
System.err.println("line-styleには0か1の数値を指定してください。");
System.err.println("usage: java AddLine in-pdf-file out-pdf-file page-num line-style line-width colorR colorG colorB opacity");
System.err.println("line-style:\n 0: 実線, 1: 破線");
System.err.println("line-width:\n 0: 細い, 1: 中, 2:太い");
return;
}
// line-widthの判定
int lineWidth = Integer.parseInt(args[4]);
switch(lineWidth){
case 0:
case 1:
case 2:
break;
default :
System.err.println("line-widthには0から2の数値を指定してください。");
System.err.println("usage: java AddLine in-pdf-file out-pdf-file page-num line-style line-width colorR colorG colorB opacity");
System.err.println("line-style:\n 0: 実線, 1: 破線");
System.err.println("line-width:\n 0: 細い, 1: 中, 2:太い");
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]);
int numPages = doc.getPageCount();
System.out.println("ページ数:" + numPages);
if((numPages < 0)||(numPages < pageToAdd))
{
System.err.println("page-numは入力PDFの全ページ数よりも小さい正の値を指定してください。");
return;
}
float colorR = Float.parseFloat(args[5]);
float colorG = Float.parseFloat(args[6]);
float colorB = Float.parseFloat(args[7]);
float opacity = Float.parseFloat(args[8]);
...【RemovePages.javaと同じ処理のため省略
・doc.getPages()メソッドを用いてPtlPages pagesにページコンテナを取得
・ページコンテナが空だった場合にエラーを出力して終了】...
// フォームの描画処理()
try (PtlPage page = pages.get(pageToAdd - 1))// ページの取得(パラメータindexは0が先頭のため1を引く)
{
drawLineOnPage(page, lineStyle, lineWidth, colorR, colorG, colorB, opacity, br);
}
}
...【AppendPages.javaと同じ処理のため省略
・PtlParamOutputを用いてPtlPDFDocument docの内容を出力
・PtlException, Exception, Error を catchするエラー処理
・finally文で"--完了--"と表示する処理】...
}
public static void drawLineOnPage(PtlPage page, int lineStyle, int lineWidth, float colorR, float colorG, float colorB, float opacity, BufferedReader br) throws PtlException, Exception, Error{
System.out.println("線の始点を設定します。");
try(PtlPoint startPoint = new PtlPoint(setPoint(br)) ) // 始点の設定(setPointを用いて初期化)
{
System.out.println("線の終点を設定します。");
try(PtlPoint endPoint = new PtlPoint(setPoint(br)) ) // 始点の設定(setPointを用いて初期化)
{
try(PtlContent content = page.getContent(); // ページコンテントの取得
PtlColorDeviceRGB colorRGB = new PtlColorDeviceRGB(colorR, colorG, colorB); //色を指定
PtlParamDrawShape paramDrawShape = new PtlParamDrawShape()) // 線の描画用パラメータクラス
{
paramDrawShape.setLineColor(colorRGB); // 線の色を指定色に設定
paramDrawShape.setOpacity(opacity); // 透明度を設定
// lineStyleの設定
switch(lineStyle){
case 0:
paramDrawShape.setLineStyle(PtlParamDrawShape.LINE_STYLE.LINE_STYLE_SOLID);
break;
case 1:
paramDrawShape.setLineStyle(PtlParamDrawShape.LINE_STYLE.LINE_STYLE_DASHED);
break;
}
// lineWidthの設定
switch(lineWidth){
case 0:
paramDrawShape.setLineWidth(PtlParamDrawShape.LINE_WIDTH.LINE_WIDTH_THIN);
break;
case 1:
paramDrawShape.setLineWidth(PtlParamDrawShape.LINE_WIDTH.LINE_WIDTH_MIDDLE);
break;
case 2:
paramDrawShape.setLineWidth(PtlParamDrawShape.LINE_WIDTH.LINE_WIDTH_THICK);
break;
}
// 指定ページの挿入
content.drawLine(startPoint, endPoint, paramDrawShape);
}
}
}
}
public static PtlPoint setPoint(BufferedReader br) throws IOException, PtlException, Exception, Error{
float x, y;
System.out.println("x座標、y座標を入力してください。原点は用紙の左下です。");
System.out.print("x (mm) : ");
x = Float.parseFloat(br.readLine());
System.out.print("y (mm) : ");
y = Float.parseFloat(br.readLine());
PtlPoint pointToSet = new PtlPoint(x,y);
return pointToSet;
}
}
AddLine.java
C:\samples>java cookbook.AddLine usage: java AddLine in-pdf-file out-pdf-file page-num line-style line-width colorR colorG colorB opacity line-style: 0: 実線, 1: 破線 line-width: 0: 細い, 1: 中, 2:太い C:\samples>java cookbook.AddLine blankPage.pdf AddLine.pdf 1 0 0 1.0 0 0 1 ページ数:1 線の始点を設定します。 x座標、y座標を入力してください。原点は用紙の左下です。 x (mm) : 10 y (mm) : 180 線の終点を設定します。 x座標、y座標を入力してください。原点は用紙の左下です。 x (mm) : 329 y (mm) : 180 -- 完了 --
