画像の大きさの計算に使う解像度(dpi)を指定します。
画像のピクセル数が同じであっても、dpi値によってPDF文書に配置する画像の大きさが変わります。画像制作者がdpi値を指定していることもありますが、画像にdpi値がないときもあります。画像に指定されたdpi値があっても、それを使わないで、別のdpi値を使うこともできます。
画像を挿入するとき、以下の優先度でdpi値が設定されます。 #setDPI()メソッドで指定した場合は指定したdpi値 #画像にdpi値が設定されていない場合はデフォルト値(72dpi) #setUseOriginalDPI()メソッドがfalseの場合はデフォルト値(72dpi) #setUseOriginalDPI()メソッドがtrueでかつ画像にdpi値が設定されている場合は画像のdpi値
プログラム例では次の順で1~3ページ目中央に描画されます。
なお、PDF文書のページ数が3ページより少ない場合はそのPDF文書のページ数まで描画します。描画領域はそれぞれのページの表示される矩形の大きさで、それより画像が大きくなる場合は矩形のサイズに縮小されます。
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角となります。