JAVA打印问题,各种打印方案都没满足我的打印要求,难难难啊,各位帮忙找个好方法
最近在弄JAVA打印时,找来找去没找到一个好的解决方案.
我是要打印canvas界面上的东西,都是由Graphics画出来的,想要有彩色,想要能通过打印对话框来设置纸型大小和纵横向
现在我了解的几种打印方案:
方案1:
Toolkit toolkit = Toolkit.getDefaultToolkit();
java.awt.PrintJob printjob = toolkit.getPrintJob(frame, "", null);
if(printjob != null)
{
g = printjob.getGraphics();
dimension = printjob.getPageDimension();
w = dimension.width;
h = dimension.height;
}
drawImg(g,w,h);
优:
这种方法来打印时,最大的方便就是可以得到打印对话框里的设置,在打印对话框里设置的纸的宽度可以在JAVA程序中得到,这样我打印的时候就可以根据纸宽来设置我打印的图片drawImg(g,w,h),横纵打印都可以直接反应在打印输出上.
缺点:
不能实现彩色打印,在我的应用中没办法采用.
第2种方案:
PrinterJob pj=PrinterJob.getPrinterJob();
if (pj != null) {
pj.setPrintable(new Printable(){
public int print(Graphics g,PageFormat pf,int page) throws PrinterException{
if(page>=1){
return Printable.NO_SUCH_PAGE;
}
drawImg(g,(int)pf.getWidth(),(int)pf.getHeight());
return Printable.PAGE_EXISTS;
}
});
if(pj.printDialog()){
try{
pj.print();
}catch(PrinterException exception){}
}
缺点:
用这种方案,打印对话框里对纸张大小的设置,纸张宽纵的设置完全不起作用.我在drawImg(g,w,h)的时候,这里完全得不到正确的由打印对话框设置的纸张大小,程序里得到的纸型都是A4,我可以在JAVA程序里自己设置纸的大小,但这个设置跟打印对话框的设置脱节
3种方案:
PrintService svc = PrintServiceLookup.lookupDefaultPrintService();
PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
PrintService selection = ServiceUI.printDialog(null, 100, 100, services, svc, null, attrs);
DocPrintJob job = service.createPrintJob();
DocFlavor flavor = DocFlavor.URL.GIF;
Doc doc = new SimpleDoc(url, flavor, null);
PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
attrs.add(new Copies(2));
job.print(doc, attrs);
用这种方案来打印,是打印文档的,不能把我的canvas内容用drawImg的方法打印出来,而且,它弹出来的打印对话框也不能调整纸型.也不行.
不知道还有别的JAVA打印方法,现在的这些我都没法满足我的要求,请问有没有好的方法来实现.
(我的要求关键是两点:1是能有彩打,1,1的方案就没有彩打,2是能从打印对话框里获取到纸型,能让客户设置纸型及模打纵打)
非常感谢!