ページ毎に印刷を行うにはどうしたらいいのだろうかとサンプルを参考に書いてみた。
ポイントは、interfaceのPrintableを実装したクラスを作るということ
そして
public int print(Graphics g,PageFormat pf,int pageIndex)
という関数を実装するということでしょうか。
pageIndexを見て、 Printable.NO_SUCH_PAGEを返してあげるまで
印刷が続くという感じでしょう。
というわけで、例によってサンプルプログラム
http://java.sun.com/j2se/1.4/ja/docs/ja/guide/jps/spec/appendix_2DPrinterJob.fm.html#997825
を参考にして、
「現在のページ数:」を表示して、四角を印字するというサンプルプログラムです。
途中。プリンタダイアログも出現します。
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.print.PrintService;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.JobName;
import javax.print.attribute.standard.OrientationRequested;
public class Print2DPrinterJob implements Printable {
public Print2DPrinterJob() {
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(OrientationRequested.LANDSCAPE);
aset.add(new Copies(2));
aset.add(new JobName("100ページの印刷", null));
PrinterJob pj = PrinterJob.getPrinterJob();
pj.setPrintable(this);
//プリンタの検索
PrintService[] services =
PrinterJob.lookupPrintServices();
// primoPDFを検索
int primoIdx=-1;
for (int i=0;i<services.length;i++){
if ("PrimoPDF".equals(services[i].getName())){
primoIdx=i;
}
}
if (services.length > 0) {
System.out.println("選択されたプリンタ: " + services[primoIdx].getName());
try {
pj.setPrintService(services[primoIdx]);
pj.pageDialog(aset);
if(pj.printDialog(aset)) {
pj.print(aset);
}
} catch (PrinterException pe) {
System.err.println(pe);
}
}
}
public int print(Graphics g,PageFormat pf,int pageIndex) {
//100ページというのは(Printable.NO_SUCH_PAGE)を返却することで表現する
if (pageIndex < 100) {
Graphics2D g2d= (Graphics2D)g;
g2d.translate(pf.getImageableX(), pf.getImageableY());
g2d.setColor(Color.black);
g2d.drawString("現在のページ数:"+(pageIndex+1), 250, 250);
g2d.fillRect(0, 0, 200, 200);
return Printable.PAGE_EXISTS;
} else {
return Printable.NO_SUCH_PAGE;
}
}
public static void main(String arg[]) {
new Print2DPrinterJob();
}
}
0 件のコメント:
コメントを投稿