JPS(Java Print Service)を使った処理で 印字属性を事前に指定する方法

一般にプログラムでの印刷処理を行う場合、用紙のサイズ・向き・余白はプログラムで固定し、実際に印字を行うプリンタは ダイアログで選択する または Default Printer に直接印字する方法をとることが多く、印字処理のたびに 用紙のサイズ・向き・余白を設定することは殆どないと思います。

JPSを使って印字を行う場合 OS標準の印刷ダイアログで サイズ・向き・余白等の指定が可能ですが 事前に指定する方法がわかったのでまとめておきます。これらの指定は PrintRequestAttributeSet にAttributeを指定して行います。

コーディング例
private void printProc() {
    //印刷データの提供形式
    DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
    //印刷要求属性
    PrintRequestAttributeSet requestAttributeSet = new HashPrintRequestAttributeSet();
    //印刷ダイアログでの出力先一覧
    PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, requestAttributeSet);
    //既定で選択される出力先
    PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
    //ここから 属性指定
    requestAttributeSet.add(new PageRanges(“1-1”));       // 印字範囲  
    requestAttributeSet.add(OrientationRequested.LANDSCAPE); // 用紙の向き
    requestAttributeSet.add(MediaSizeName.ISO_A4);               //用紙A4

// 余白(mm)をもとに印字可能領域を設定する
float leftMargin = 20;
float rightMargin = 20;
float topMargin = 20;
float bottomMargin = 1;
MediaSize mediaSize = MediaSize.ISO.A4;
    float mediaWidth = mediaSize.getX(Size2DSyntax.MM);
    float mediaHeight = mediaSize.getY(Size2DSyntax.MM);
    requestAttributeSet.add(new MediaPrintableArea(leftMargin, topMargin,
        (mediaWidth – leftMargin – rightMargin),(mediaHeight – topMargin – bottomMargin), Size2DSyntax.MM));

requestAttributeSet.add(new JobName(“hogehoge”, Locale.getDefault())); //ジョブ名
    // ここまで印字属性

//印刷ダイアログを表示して選択した出力先を得る 予め指定した属性でダイアログが表示された
PrintService service = ServiceUI.printDialog(null, 100, 100, services, defaultService, flavor, requestAttributeSet);
if (service != null){
DocPrintJob job = service.createPrintJob(); //印刷ジョブの生成
ClsPrintable clsPrintable = new ClsPrintable();
SimpleDoc doc = new SimpleDoc(clsPrintable, flavor, null);
//ジョブに印刷を依頼する
try {
job.print(doc, requestAttributeSet);
} catch (PrintException e) {
e.printStackTrace();
}
}
}

なお 印字位置はピクセル値で指定しますが プリンタの仕様にかかわらず 1インチ=72ピクセルで換算すれば 良いようです。

使用OS:Windows7 Java:Java SE1.7

参考にしたURL
http://codezine.jp/article/detail/2468
https://forums.oracle.com/thread/1289082

スポンサーリンク
Rectangle大広告
Rectangle大広告

シェアする

  • このエントリーをはてなブックマークに追加

フォローする