
テキストボックスを用いてPDFにテキストを描画します。
テキストボックステキストボックスでテキストを描画することで、文字列は指定した範囲で自動的に折り返されPDFに挿入されます。
PtlTextBox.terminate()を実行しないとコンテントに書き出されないため、テキストボックスを呼び出した際は必ず呼ぶようにしてください。
サンプルプログラムでは、入力PDFに対して指定した矩形にテキストボックスを用いて文字を描画します。描画する文字は引数で指定し、矩形はプログラム実行中に指定します。
package cookbook;
import java.io.*;
import jp.co.antenna.ptl.*;
public class TBoxDrawTextBox{
// そのクラスのusageを表示する関数
private static void printUsage() {
System.out.println("usage: java TBoxDrawTextBox in-pdf-file out-pdf-file"
+ " page-num text-to-add text-align");
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
if (args.length < 5) {
printUsage();
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("テキスト挿入ページは全ページ数よりも小さい正の値を指定してください。");
return;
}
String textToAdd = args[3];
String textAlign = args[4];
try (PtlPages pages = doc.getPages()) {//ページコンテナの取得
// ページコンテナが空かどうか
if (pages.isEmpty()) {
System.err.println("ページコンテナが空");
return;
}
try (PtlPage page = pages.get(pageToAdd - 1);// ページの取得(0が先頭のため1を引く)
PtlContent content = page.getContent();// ページコンテントの取得
PtlRect outputRect = new PtlRect();// 出力矩形の初期化
PtlTextBox textBox = content.drawTextBox(setRectCoordinate(br,outputRect),
PtlContent.ALIGN.valueOf(textAlign), 210, 297);
// 文字描画のパラメータクラス。
PtlParamWriteStringTextBox plainParam = new PtlParamWriteStringTextBox()) {
textBox.writeString(textToAdd, plainParam);// 文字列出力
textBox.terminate();
}
catch (IllegalArgumentException ex) {//PtlContent.ALIGN指定のエラー処理
System.out.println(ex.getMessage());
System.out.println("ERROR : alignにはPtlContent.ALIGNに含まれる名前を指定してください。");
ex.printStackTrace();
}
}
// ファイルに保存します。
doc.save(outputFile);
}
...【GetPDFVersion.javaと同じ処理のため省略
・エラーメッセージ処理と出力】...
}
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;
}
}
TBoxDrawTextBox.java
C:\samples>java cookbook.TBoxDrawTextBox usage: java TBoxDrawTextBox in-pdf-file out-pdf-file page-num text-to-add text-align C:\samples>java cookbook.TBoxDrawTextBox gray_landscape_A4blank.pdf Output_TBoxDrawTextBox.pdf 1 "これは、テキストボックスの入力文章です。このようにテキストボックスに入力された文章は折り返されます。" ALIGN_CENTER ページ数:1 指定する矩形の各数値を入力してください。 top (mm) : 120 bottom (mm) : 80 left (mm) : 50 right (mm) : 130 -- 完了 --
この操作例では、入力した文字列はPDF(横向きA4サイズ)の左下隅を基準に、左下頂点(50mm, 80mm)、右上頂点(130mm, 120mm)の矩形でテキストボックス(赤い点線)が挿入されます。
