2.4.1 パスで直線の描画

images/AddLine-top.png

狙い・効果

PDF文書のページ上に直線を描画します。

処理の概要

PDF文書の中で、直線を描くページ位置を指定します。

指定したページを読み込みます。

線の開始位置と終了位置を指定します。

線の属性を指定します。

直線を書き込み、PDF文書を保存します。

PDF Tool APIの主な機能

プログラム例

package cookbook;

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


public class AddLine {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 9)
        {
            System.out.println("usage: java AddLine in-pdf-file out-pdf-file page-num line-style line-width colorR colorG colorB opacity");
            System.out.println("line-style:\n 0: 実線, 1: 破線");
            System.out.println("line-width:\n 0: 細い, 1: 中, 2:太い");
            return;
        }

        // line-styleの判定
        int lineStyle = Integer.parseInt(args[3]);
        switch(lineStyle){
        case 0:
        case 1:
            break;
        default :
            System.err.println("line-styleには0か1の数値を指定してください。");
            System.err.println("usage: java AddLine in-pdf-file out-pdf-file page-num line-style line-width colorR colorG colorB opacity");
            System.err.println("line-style:\n 0: 実線, 1: 破線");
            System.err.println("line-width:\n 0: 細い, 1: 中, 2:太い");
            return;
        }

        // line-widthの判定
        int lineWidth = Integer.parseInt(args[4]);
        switch(lineWidth){
        case 0:
        case 1:
        case 2:
            break;
        default :
            System.err.println("line-widthには0から2の数値を指定してください。");
            System.err.println("usage: java AddLine in-pdf-file out-pdf-file page-num line-style line-width colorR colorG colorB opacity");
            System.err.println("line-style:\n 0: 実線, 1: 破線");
            System.err.println("line-width:\n 0: 細い, 1: 中, 2:太い");
            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("page-numは入力PDFの全ページ数よりも小さい正の値を指定してください。");
                return;
            }
            float colorR = Float.parseFloat(args[5]);
            float colorG = Float.parseFloat(args[6]);
            float colorB = Float.parseFloat(args[7]);
            float opacity = Float.parseFloat(args[8]);



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

                // フォームの描画処理()
                try (PtlPage page = pages.get(pageToAdd - 1))// ページの取得(パラメータindexは0が先頭のため1を引く)
                {
                    drawLineOnPage(page, lineStyle, lineWidth, colorR, colorG, colorB, opacity, br);
                }
            }


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

    }

    public static void drawLineOnPage(PtlPage page, int lineStyle, int lineWidth, float colorR, float colorG, float colorB, float opacity, BufferedReader br) throws PtlException, Exception, Error{
        System.out.println("線の始点を設定します。");
        try(PtlPoint startPoint = new PtlPoint(setPoint(br)) ) // 始点の設定(setPointを用いて初期化)
        {
            System.out.println("線の終点を設定します。");
            try(PtlPoint endPoint = new PtlPoint(setPoint(br)) ) // 始点の設定(setPointを用いて初期化)
            {
                try(PtlContent content = page.getContent(); // ページコンテントの取得
                    PtlColorDeviceRGB colorRGB = new PtlColorDeviceRGB(colorR, colorG, colorB); //色を指定
                    PtlParamDrawShape paramDrawShape = new PtlParamDrawShape()) // 線の描画用パラメータクラス
                {
                    paramDrawShape.setLineColor(colorRGB); // 線の色を指定色に設定
                    paramDrawShape.setOpacity(opacity); // 透明度を設定

                    // lineStyleの設定
                    switch(lineStyle){
                    case 0:
                        paramDrawShape.setLineStyle(PtlParamDrawShape.LINE_STYLE.LINE_STYLE_SOLID);
                        break;
                    case 1:
                        paramDrawShape.setLineStyle(PtlParamDrawShape.LINE_STYLE.LINE_STYLE_DASHED);
                        break;
                    }

                    // lineWidthの設定
                    switch(lineWidth){
                    case 0:
                        paramDrawShape.setLineWidth(PtlParamDrawShape.LINE_WIDTH.LINE_WIDTH_THIN);
                        break;
                    case 1:
                        paramDrawShape.setLineWidth(PtlParamDrawShape.LINE_WIDTH.LINE_WIDTH_MIDDLE);
                        break;
                    case 2:
                        paramDrawShape.setLineWidth(PtlParamDrawShape.LINE_WIDTH.LINE_WIDTH_THICK);
                        break;
                    }
                    // 指定ページの挿入
                    content.drawLine(startPoint, endPoint, paramDrawShape);
                }
            }
        }
    }

    public static PtlPoint setPoint(BufferedReader br) throws IOException, PtlException, Exception, Error{
        float x, y;

        System.out.println("x座標、y座標を入力してください。原点は用紙の左下です。");
        System.out.print("x (mm) : ");
        x = Float.parseFloat(br.readLine());
        System.out.print("y (mm) : ");
        y = Float.parseFloat(br.readLine());

        PtlPoint pointToSet = new PtlPoint(x,y);
        return pointToSet;
    }

}

プログラムファイル名

AddLine.java

入出力操作の例

images/AddLine.png

images/AddLine-example.png

図2・20 直線(細い実線、赤)の例