最近在弄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是能从打印对话框里获取到纸型,能让客户设置纸型及模打纵打)非常感谢!
现在我了解的几种打印方案:
方案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是能从打印对话框里获取到纸型,能让客户设置纸型及模打纵打)非常感谢!
解决方案 »
- 求java中子类对象和父类对象的内存模型图?
- 新手学Java,请多指点
- 如何在TextArea中对里面显示的汉字字体进行设置啊?
- 急需帮助:请问java.net.SocketException: Too many open files,一般是什么情况引起的,应该什么解决!!!!
- 求生成txt文件的java类库?
- 流问题
- java有没有好的方法解决金额显示的问题啊,字符串不能转换为double型啊,
- 在java中,各鍵对应的代码为什么?
- java.lang.NullPointerException如何消除空指针异常!
- 转码在jsp页面中文全为问号 求大神帮忙
- 小弟新手,哪位大哥可以给小弟提供一个免费又好用的开发软件!!
- 有關ArrayList的問題,請求大家幫忙
我们在开发软件的时候,碰到打印的,我基本上不去碰这些东西了。
我会按照格式导入到Excel表格,由Excel去打印。
为什么不利用Excel的打印功能而自己开发,因为Java控制打印很烦而且效果不好。
我觉得楼主可以考虑一下这个办法。
哥们,我是打印图形啊,图形还要根据纸的大小还调整输出大小的啊.
关注
Java 在打印方面做得还不够强。楼主可以试着将要打印的东西转换成图片或者是pdf档案,然后通过其他软件来打印。我们现在是转成pdf后打印,省去了很多麻烦,java产生pdf文件倒是很简单。
2. Applet控制打印机一般是被禁止的吧, 是否你的签名不正确, 所以applet无法访问本地资源
3. 实在不行还是建议用PDF, IE中打开一个PDF文件, 这样打印你能省去不少功夫
用JAVA1.2的打印方法打印是有了彩色了,却读不到打印机中纸的大小了
其实这两者结合起来就可以达到我的要求了