
テキストボックスによる描画の際にテキストボックス縦書き指定します。
PtlTextBox.setWritingMode()を用いてテキストボックスの文字を縦書きにすることができます。
サンプルプログラムでは、テキストボックスで文字列を描画する際に縦書きと横書きを指定します。その他の項目に関してはTBoxDrawTextBox.javaと同一の動作をします。
| 列挙型定数 | 内容 |
|---|---|
| MODE_HORIZONTAL = 0 | 横書き |
| MODE_VERTICAL = 1 | 縦書き |
package cookbook;
import java.io.*;
import jp.co.antenna.ptl.*;
public class TBoxDrawTextBoxVerticalText{
// そのクラスのusageを表示する関数
private static void printUsage() {
System.out.println("usage: java TBoxDrawTextBoxVerticalText"
+ " in-pdf-file out-pdf-file"
+ " page-num text-to-add text-align"
+ " set-vertical");
System.out.println("set-vertical:");
System.out.println("0 : 横書きにする 1 : 縦書きにする");
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
if (args.length < 6) {
printUsage();
return;
}
boolean setVertical = false;
try {
setVertical = readBoolArgs(args[5], "set-verticalには0か1を指定して下さい。");
}
catch (IllegalArgumentException ex) {
System.out.println(ex.getMessage());
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]);
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);// ページの取得(パラメータindexは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()) {// 文字描画のパラメータクラス。
//setVerticalがTrueならsetWritingModeで縦書きを選択
if(setVertical){
textBox.setWritingMode(PtlTextBox.MODE.MODE_VERTICAL.value());
}else{//setVerticalがFalseならsetWritingModeで横書きを選択
textBox.setWritingMode(PtlTextBox.MODE.MODE_HORIZONTAL.value());
}
// 文字列出力
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);
}catch (NumberFormatException numfe) {
System.out.println("RGB及び透明度の指定には数値を使用して下さい。");
System.out.println(numfe.getMessage());
numfe.printStackTrace();
}
...【GetPDFVersion.javaと同じ処理のため省略
・エラーメッセージ処理と出力】...
}
public static PtlRect setRectCoordinate(BufferedReader br, PtlRect outputRect)
throws IOException, PtlException, Exception, Error {
...【TBoxDrawTextBox.javaと同じ処理のため省略
・[top, bottom, left, right]を設定し、PtlRect型変数を返す関数】...
}
public static boolean readBoolArgs(String args, String errorMessage)
throws IllegalArgumentException {
...【FixUpPDFASetSaveOption.javaと同じ処理のため省略
・0または1を読み取り、boolean型のfalseまたはtrueを返す関数】...
}
}
TBoxDrawTextBoxVerticalText.java
C:\samples>java cookbook.TBoxDrawTextBoxVerticalText usage: java TBoxDrawTextBoxVerticalText in-pdf-file out-pdf-file page-num text-to-add text-align set-vertical set-vertical: 0 : 横書きにする 1 : 縦書きにする C:\samples>java cookbook.TBoxDrawTextBoxVerticalText gray_landscape_A4blank.pdf Output_TBoxDrawTextBoxVerticalText.pdf 1 "テキストボックス入力文章。このようにテキストボックスに入力された文章は折り返されます。" ALIGN_CENTER 1 ページ数:1 指定する矩形の各数値を入力してください。 top (mm) : 120 bottom (mm) : 80 left (mm) : 50 right (mm) : 130 -- 完了 --
この入力例ではPDFの左下隅を基準に、左下頂点(50mm, 80mm)、右上頂点(130mm, 120mm)の矩形でテキストボックスが挿入されますが、テキストは縦書きで挿入されています。
