2.1.3 文字の色指定

images/AddTextSetColor-top.png

狙い・効果

文字を塗りつぶす色を指定します。

処理の概要

色の指定方法と文字を塗りつぶす色を指定します。最初に次に挙げる色空間のどれかを指定します。

表2・3 色空間を表現するクラス
色空間を表現するクラス
色空間
PtlColorNone
無色。PtlColorNone(無色)を指定した時は文字が表示されません。
PtlColorDeviceGray
DeviceGray
PtlColorDeviceRGB
DeviceRGB
PtlColorDeviceCMYK
DeviceCMYK
PtlColorSeparation
Separation Color(※ V7.0以降のみ)

次に色空間毎に色の要素を指定します。例えばDeviceRGBを指定した時は赤(R)、緑(G)、青(B)の三原色をそれぞれ0.0~1.0の範囲で指定します。色を設定しない場合はデフォルト値として黒色が設定されます。

注記

※:V7.0以降の『PDF Tool API』では、Separation Colorによる色指定が可能です。Separation Colorに関する詳細は「『PDF CookBook』(第5巻)10.4.1 Separation Colorの対応」を参照してください。

『PDF Tool API』の主な機能

この例では主に次の機能を使っています。

プログラム例

package cookbook;

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

public class AddTextSetColor {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 3)
        {
            System.out.println("usage: java AddTextSetColor 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色空間で色表現したクラス
                {

                    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;                        
                    }

                    // 文字列出力 (中央に文字列を作成)
                    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;

    }
}

サンプルファイル名

AddTextSetColor.java

入出力操作の例

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

C:\samples>java cookbook.AddTextSetColor blankPage.pdf color0.pdf 0 
無色が指定されました。無色で文字を描画します。
-- 完了 --

C:\samples>java cookbook.AddTextSetColor blankPage.pdf colorGray.pdf 1 
グレースケール値を0.0~1.0の範囲で入力してください。0.0が黒、1.0が白。
0.5
-- 完了 --


C:\samples>java cookbook.AddTextSetColor blankPage.pdf colorRGB.pdf 2 
RGBの各要素の値を0.0~1.0の範囲で入力してください。0.0が要素なし、1.0が要素の最大
赤:1
緑:0
青:0
-- 完了 --

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

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

images/AddTextSetColor.png

図2・3 DeviceRGB色を用いて[R= 1.0, G= 0.0, B= 0.0]の文字色を設定した例