2.1.4 文字の輪郭線の色

images/AddTextSetOutlineColor-top.png

狙い・効果

文字の輪郭線の色を指定します。

処理の概要

文字の輪郭線の色を指定します。色の指定方法は文字の塗りつぶしと同じです。

色を設定しない場合はデフォルト値として文字色と同色が設定されます。

『PDF Tool API』の主な機能

プログラム例

package cookbook;

import java.io.*;
import jp.co.antenna.ptl.*;

public class AddTextSetOutlineColor {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 3)
        {
            System.out.println("usage: java AddTextSetOutlineColor in-pdf-file out-pdf-file color-space");
            System.out.println("color-space\n  0:無色 1:DeviceGray 2:DeviceRGB 3:DeviceCMYK");
            return;
        }

        int colorSpace = Integer.parseInt(args[2]);
        switch(colorSpace)
        {
        case 0:
        case 1:
        case 2:
        case 3:
            break;
        default:
            System.err.println("color-spaceには0から3の数を指定してください。");
            System.err.println("usage: java AddTextSetColor in-pdf-file out-pdf-file color-space");
            System.err.println("color-space\n  0:無色 1:DeviceGray 2:DeviceRGB 3:DeviceCMYK");
            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);


        ...【RemovePages.javaと同じ処理のため省略
             ・doc.getPages()メソッドを用いてPtlPages pagesにページコンテナを取得
             ・ページコンテナが空だった場合にエラーを出力して終了】...


                try (PtlPage page = pages.get(0); // ページの取得(先頭ページを取得)
                     PtlContent content = page.getContent(); // ページコンテントの取得
                     PtlRect outputRect = page.getViewBox(); // 出力矩形の設定。(ページの大きさを得るためにViewBoxを取得する)
                     PtlParamWriteString writeStringParam = new PtlParamWriteString(); // 文字描画のパラメータクラス
                     // 色表現用のクラスを作成
                     PtlColorNone colorNone = new PtlColorNone(); // 無色を表現したクラス
                     PtlColorDeviceGray colorGray = new PtlColorDeviceGray(); // DeviceGray色空間で色表現したクラス
                     PtlColorDeviceRGB colorRGB = new PtlColorDeviceRGB(); //DeviceRGB色空間で色表現したクラス
                     PtlColorDeviceCMYK colorCMYK = new PtlColorDeviceCMYK()) //DeviceCMYK色空間で色表現したクラス
                {
                    System.out.println("文字色を設定します。");
                    switch(colorSpace)
                    {
                    case 0: //無色
                        System.out.println("無色が指定されています。無色で文字を描画します。");
                        writeStringParam.setTextColor(colorNone);
                        break;
                    case 1: //DeviceGray
                        System.out.println("グレースケール値を0.0~1.0の範囲で入力してください。0.0が黒、1.0が白。");
                        colorGray.setGray(setValue(br));
                        writeStringParam.setTextColor(colorGray);
                        break;
                    case 2: //DeviceRGB
                        System.out.println("RGBの各要素の値を0.0~1.0の範囲で入力してください。0.0が要素なし、1.0が要素の最大");
                        System.out.print("赤:");
                        colorRGB.setR(setValue(br));
                        System.out.print("緑:");
                        colorRGB.setG(setValue(br));
                        System.out.print("青:");
                        colorRGB.setB(setValue(br));
                        writeStringParam.setTextColor(colorRGB);
                        break;
                    case 3: //DeviceCMYK
                        System.out.println("CYMKの各要素の値を0.0~1.0の範囲で入力してください。0.0が要素なし、1.0が要素の最大");
                        System.out.print("シアン:");
                        colorCMYK.setC(setValue(br));
                        System.out.print("マゼンタ:");
                        colorCMYK.setM(setValue(br));
                        System.out.print("黄:");
                        colorCMYK.setY(setValue(br));
                        System.out.print("色調(黒):");
                        colorCMYK.setK(setValue(br));
                        writeStringParam.setTextColor(colorCMYK);
                        break;                        
                    }

                    System.out.println("文字の輪郭線の色を設定します。");
                    switch(colorSpace)
                    {
                    case 0: //無色
                        System.out.println("無色が指定されています。無色で文字を描画します。");
                        writeStringParam.setOutlineColor(colorNone);
                        break;
                    case 1: //DeviceGray
                        System.out.println("グレースケール値を0.0~1.0の範囲で入力してください。0.0が黒、1.0が白。");
                        colorGray.setGray(setValue(br));
                        writeStringParam.setOutlineColor(colorGray);
                        break;
                    case 2: //DeviceRGB
                        System.out.println("RGBの各要素の値を0.0~1.0の範囲で入力してください。0.0が要素なし、1.0が要素の最大");
                        System.out.print("赤:");
                        colorRGB.setR(setValue(br));
                        System.out.print("緑:");
                        colorRGB.setG(setValue(br));
                        System.out.print("青:");
                        colorRGB.setB(setValue(br));
                        writeStringParam.setOutlineColor(colorRGB);
                        break;
                    case 3: //DeviceCMYK
                        System.out.println("CYMKの各要素の値を0.0~1.0の範囲で入力してください。0.0が要素なし、1.0が要素の最大");
                        System.out.print("シアン:");
                        colorCMYK.setC(setValue(br));
                        System.out.print("マゼンタ:");
                        colorCMYK.setM(setValue(br));
                        System.out.print("黄:");
                        colorCMYK.setY(setValue(br));
                        System.out.print("色調(黒):");
                        colorCMYK.setK(setValue(br));
                        writeStringParam.setOutlineColor(colorCMYK);
                        break;                        
                    }

                    // 文字列出力 (中央に文字列を作成)
                    content.writeString(outputRect, PtlContent.ALIGN.ALIGN_CENTER,
                                        "writeString Test : set color", writeStringParam);
                }
            }


        ...【AppendPages.javaと同じ処理のため省略
             ・PtlParamOutputを用いてPtlPDFDocument docの内容を出力
             ・PtlException, Exception, Error を catchするエラー処理
             ・finally文で"--完了--"と表示する処理】...

    }

    public static float setValue(BufferedReader br)throws IOException{
        float value = -1.0f;
        boolean isValueOk = false;
        while(!isValueOk)
        {
            value = Float.parseFloat(br.readLine());
            if((value < 0) || (1.0f < value))
            {
                System.out.println("0.0から1.0の範囲で再度値を設定してください。");
            }
            else
            {
                isValueOk = true;
            }
        }
        return value;

    }
}

サンプルファイル名

AddTextSetOutlineColor.java

入出力操作の例

C:\samples>java cookbook.AddTextSetOutlineColor 
usage: java AddTextSetOutlineColor in-pdf-file out-pdf-file color-space
color-space
  0:無色 1:DeviceGray 2:DeviceRGB 3:DeviceCMYK

C:\samples>java cookbook.AddTextSetOutlineColor blankPage.pdf outline0.pdf 0 
文字色を設定します。
無色が指定されています。無色で文字を描画します。
文字の輪郭線の色を設定します。
無色が指定されています。無色で文字を描画します。
-- 完了 --

C:\samples>java cookbook.AddTextSetOutlineColor blankPage.pdf outlineGray.pdf 1 
文字色を設定します。
グレースケール値を0.0~1.0の範囲で入力してください。0.0が黒、1.0が白。
0.5
文字の輪郭線の色を設定します。
グレースケール値を0.0~1.0の範囲で入力してください。0.0が黒、1.0が白。
0.9
-- 完了 --

C:\samples>java cookbook.AddTextSetOutlineColor blankPage.pdf outlineRGB.pdf 2 
文字色を設定します。
RGBの各要素の値を0.0~1.0の範囲で入力してください。0.0が要素なし、1.0が要素の最大
赤:1
緑:0
青:0
文字の輪郭線の色を設定します。
RGBの各要素の値を0.0~1.0の範囲で入力してください。0.0が要素なし、1.0が要素の最大
赤:0
緑:1
青:0
-- 完了 --

C:\samples>java cookbook.AddTextSetOutlineColor blankPage.pdf outlineCYMK.pdf 3 
文字色を設定します。
CYMKの各要素の値を0.0~1.0の範囲で入力してください。0.0が要素なし、1.0が要素の最大
シアン:1
マゼンタ:0
黄:0
色調(黒):0
文字の輪郭線の色を設定します。
CYMKの各要素の値を0.0~1.0の範囲で入力してください。0.0が要素なし、1.0が要素の最大
シアン:0
マゼンタ:1
黄:0
色調(黒):0
-- 完了 --

ここでは上から順に、無色、グレースケール、RGBカラー、CMYKカラーの色空間で、輪郭線の色と塗りつぶしの色を指定しています。

images/AddTextSetOultineColor-example.png

図2・4 輪郭線を緑、塗りつぶしを赤で指定した例