2.2.3 解像度(dpi)の設定

images/AddImageSetDpi-top.png

狙い・効果

画像の大きさの計算に使う解像度(dpi)を指定します。

処理の概要

画像のピクセル数が同じであっても、dpi値によってPDF文書に配置する画像の大きさが変わります。画像制作者がdpi値を指定していることもありますが、画像にdpi値がないときもあります。画像に指定されたdpi値があっても、それを使わないで、別のdpi値を使うこともできます。

画像を挿入するとき、以下の優先度でdpi値が設定されます。 #setDPI()メソッドで指定した場合は指定したdpi値 #画像にdpi値が設定されていない場合はデフォルト値(72dpi) #setUseOriginalDPI()メソッドがfalseの場合はデフォルト値(72dpi) #setUseOriginalDPI()メソッドがtrueでかつ画像にdpi値が設定されている場合は画像のdpi値

プログラム例では次の順で1~3ページ目中央に描画されます。

  1. setDPI()メソッドで指定したdpiで描画した画像
  2. デフォルトの72 dpiで描画した画像
  3. もし画像にdpi値が設定されていた場合は画像が持つdpiで描画、設定されていない場合はデフォルトの72 dpiで描画した画像

なお、PDF文書のページ数が3ページより少ない場合はそのPDF文書のページ数まで描画します。描画領域はそれぞれのページの表示される矩形の大きさで、それより画像が大きくなる場合は矩形のサイズに縮小されます。

『PDF Tool API』の主な機能

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class AddImageSetDpi {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 4)
        {
            System.out.println("usage: java AddImageSetDpi in-pdf-file out-pdf-file insert-image-file dpi-to-set");
            return;
        }


        ...【AppendPages.javaと同じ処理のため省略
             ・PtlParamInputを用いてPtlPDFDocument docに入力PDFをロード
             ・PtlParamOutputを用いて出力PDF名を指定】...


            //コマンドライン引数の取得
            String imageURI = args[2];
            int numDPI = Integer.parseInt(args[3]);
            int numPages = doc.getPageCount();
            System.out.println("ページ数:" + numPages);
            if(numPages < 3)
            {
                System.out.println("ページ数が3未満です。"+ numPages +"ページ目まで出力されます。");
            }


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

                for(int i = 0; (i < 3)&&(i < numPages); i++)
                {
                    try (PtlPage page = pages.get(i);// ページの取得(パラメータ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);

                        // dpi入力設定。
                        switch(i){
                        case 0:
                            paramDrawImage.setUseOriginalDPI(false);
                            paramDrawImage.setDPI(numDPI);
                            // 画像出力
                            content.drawImage(outputRect, PtlContent.ALIGN.ALIGN_CENTER, paramDrawImage);
                            // dpiの状態テキストを描画
                            content.writeString(outputRect, PtlContent.ALIGN.ALIGN_CENTER, "setDpi : " + numDPI, plainParam);
                            break;

                        case 1:
                            paramDrawImage.setUseOriginalDPI(false);
                            // 画像出力
                            content.drawImage(outputRect, PtlContent.ALIGN.ALIGN_CENTER, paramDrawImage);
                            // dpiの状態テキストを描画
                            content.writeString(outputRect, PtlContent.ALIGN.ALIGN_CENTER, "Default DPI: 72" , plainParam);
                            break;

                        case 2:
                            paramDrawImage.setUseOriginalDPI(true);
                            // 画像出力
                            content.drawImage(outputRect, PtlContent.ALIGN.ALIGN_CENTER, paramDrawImage);
                            // dpiの状態テキストを描画
                            content.writeString(outputRect, PtlContent.ALIGN.ALIGN_CENTER, "Original DPI" , plainParam);
                            break;
                        }
                    }
                }
            }


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

    }
}

プログラムファイル名

AddImageSetDpi.java

入出力操作の例

C:\samples>java cookbook.AddImageSetDpi 200x200mm.pdf addImageDpi200.pdf JpegImageSQ.jpg 200 
ページ数:5
-- 完了 --

指定画像(JpegImageSQ.jpg)は、サイズが幅329px×高さ329pxで、解像度が96dpiに設定されています。次の図は左から1ページ目、2ページ目、3ページ目ですが、dpi値は左:200dpi、中:72dpi(デフォルトdpi)、右:96dpi(画像のdpi)となっています。印刷時の寸法はそれぞれ約42mm角、約116mm角、約87mm角となります。

images/AddImageSetDpi-example.png

図2・11 画像のdpi指定による大きさの変化