テキストボックスによる描画の際に描画矩形背景色・縁取りの色を設定します。
PtlTextBoxでは描画矩形の背景色・縁取りの色を指定できます。『PDF Tool API』が扱えるすべての色空間を扱え、具体的にはDeviceCMYK、DeviceGray、DeviceRGB、セパレーション色です。(色空間に関する詳細は「『PDF CookBook』(第1巻)2.1.3 文字の色指定」と「10.4.1 Separation Colorの対応」を参照してください)
サンプルプログラムでは、DeviceRGBを用いてテキストボックスの背景色・縁取りの色を指定します。その他の要素はTBoxDrawTextBox.javaと同様です。
package cookbook; import java.io.*; import jp.co.antenna.ptl.*; public class TBoxDrawTextBoxSetBoxColors{ // そのクラスのusageを表示する関数 private static void printUsage() { System.out.println("usage: java TBoxDrawTextBoxSetBoxColors" + " in-pdf-file out-pdf-file" + " page-num text-to-add text-align" + " back-color-R back-color-G back-color-B" + " outline-color-R outline-color-G outline-color-B"); } /** * @param args the command line arguments */ public static void main(String[] args) { if (args.length < 11) { 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]; // RGBの数値の取得 float backR = Float.parseFloat(args[5]); float backG = Float.parseFloat(args[6]); float backB = Float.parseFloat(args[7]); float outlineR = Float.parseFloat(args[8]); float outlineG = Float.parseFloat(args[9]); float outlineB = Float.parseFloat(args[10]); 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(); // 文字描画のパラメータクラス。 PtlColorDeviceRGB backColor = new PtlColorDeviceRGB(backR, backG, backB); PtlColorDeviceRGB outlineColor = new PtlColorDeviceRGB(outlineR, outlineG, outlineB)) { // 矩形の背景色の指定 textBox.setBackColor(backColor); // 矩形の縁取りの色の指定 textBox.setOutlineColor(outlineColor); // 文字列出力 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型変数を返す関数】... } }
TBoxDrawTextBoxSetBoxColors.java
C:\samples>java cookbook.TBoxDrawTextBoxSetBoxColors usage: java TBoxDrawTextBoxSetBoxColors in-pdf-file out-pdf-file page-num text-to-add text-align back-color-R back-color-G back-color-B outline-color-R outline-color-G outline-color-B C:\samples>java cookbook.TBoxDrawTextBoxSetBoxColors gray_landscape_A4blank.pdf Output_TBoxDrawTextBoxSetBoxColors.pdf 1 "これは、テキストボックスの入力文章です。このようにテキストボックスに入力された文章は折り返されます。" ALIGN_CENTER 1.0 0.9 0.5 1.0 0.4 0.0 ページ数:1 指定する矩形の各数値を入力してください。 top (mm) : 120 bottom (mm) : 80 left (mm) : 50 right (mm) : 130 -- 完了 --
この操作例ではRGBで背景色・輪郭色をそれぞれ指定しています。