
画像の大きさの計算に使う解像度(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角となります。
