2.2.6 透明度の設定

images/AddImageSetOpacity-top.png

狙い・効果

描画する画像の不透明度を指定します。

処理の概要

描画する画像の不透明度を0.0 〜 1.0の数値で指定します。不透明度0.0を指定すると描画した画像は透明となります。また、画像の中央部分に指定した不透明度の数値を文字で記入します。

『PDF Tool API』の主な機能

プログラム例

package cookbook;

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


public class AddImageSetOpacity {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 4)
        {
            System.out.println("usage: java AddImageSetOpacity in-pdf-file out-pdf-file insert-image-file opacity");
            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);

            //コマンドライン引数の取得
            String imageURI = args[2];
            int numPages = doc.getPageCount();
            System.out.println("ページ数:" + numPages);
            float opacity = Float.parseFloat(args[3]);


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


                try (PtlPage page = pages.get(0);// 先頭ページの取得(パラメータindexは0が先頭)
                     PtlContent content = page.getContent();// ページコンテントの取得
                     PtlRect outputRect = page.getViewBox(); // 出力矩形の設定。(ページの大きさを得るためにViewBoxを取得する)
                     PtlParamDrawImage paramDrawImage = new PtlParamDrawImage(); //画像の描画に使うパラメータクラス
                     PtlParamInput insertImage = new PtlParamInput(imageURI); //画像指定に使うパラメータクラス
                     PtlParamWriteString plainParam = new PtlParamWriteString()) // 文字描画のパラメータクラス。今回は何も設定しな
                {
                    //入力画像ストリームの設定
                    paramDrawImage.setImageStream(insertImage);
                    //マルチTiffのページ番号の設定(マルチTiffファイルにのみ有効) 
                    //数値を設定しない場合は、-1が設定されたとみなします
                    //PtlParamImagePageに設定する場合に限り、-1を設定すると全ページを挿入します。
                    paramDrawImage.setImagePageNumber(0);

                    // 透明度を設定
                    paramDrawImage.setOpacity(opacity);
                    // 画像出力
                    content.drawImage(outputRect, PtlContent.ALIGN.ALIGN_CENTER, paramDrawImage);
                    // Opacityの状態テキストを描画
                    content.writeString(outputRect, PtlContent.ALIGN.ALIGN_CENTER, "Opacity = " + opacity, plainParam);
                }
                catch (IllegalArgumentException ex){//PtlContent.ALIGNの指定が誤っていた場合のエラーメッセージ
                    System.out.println(ex.getMessage());
                    System.out.println("ERROR : alignにはPtlContent.ALIGNに含まれる名前を指定してください。");
                    ex.printStackTrace();
                }
            }


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

    }
}

プログラムファイル名

AddImageSetOpacity.java

入出力操作の例

C:\samples>java cookbook.AddImageSetOpacity 
usage: java AddImageSetOpacity in-pdf-file out-pdf-file insert-image-file opacity

C:\samples>java cookbook.AddImageSetOpacity test-edited.pdf addImageOpacity.pdf JpegImage.jpg 0.5 
ページ数:1
-- 完了 --

PDF文書(左)に、画像(左:JpegImage.jpg)を不透明度50%の設定にして追加した結果は図の右のようになります。

images/AddImageSetOpacity-example.png

図2・14 不透明度を50%に設定した画像を追加(右)