一般にプログラムでの印刷処理を行う場合、用紙のサイズ・向き・余白はプログラムで固定し、実際に印字を行うプリンタは ダイアログで選択する または 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