JAVA打印问题,各种打印方案都没满足我的打印要求,难难难啊,各位帮忙找个好方法

cql0007 2006-03-08 11:45:32
最近在弄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是能从打印对话框里获取到纸型,能让客户设置纸型及模打纵打)

非常感谢!
...全文
816 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
ciahi 2006-04-08
  • 打赏
  • 举报
回复
顶啦!
cql0007 2006-04-06
  • 打赏
  • 举报
回复
多谢楼上老兄.

我做的东西是应用于局域网内的,APPLET都是做了数字签名的,对本地资源的访问不存在问题

其实是个GIS应用了,所以在应用中要根据客户的需求打印不同大小图形输出,而我的想法得到纸的大小是从打印机处直接获取参数的,在打印对话框中读到纸张大小后,就可以在我的画布中根据纸大小画不同大小的图来打印了.

用JAVA1.1那个打印的方法就可以读到打印机的纸张大小了,可惜它的打印没有彩色
用JAVA1.2的打印方法打印是有了彩色了,却读不到打印机中纸的大小了
其实这两者结合起来就可以达到我的要求了
bgceft 2006-04-05
  • 打赏
  • 举报
回复
汗~ 友情帮顶
cql0007 2006-04-05
  • 打赏
  • 举报
回复
我主要是做APPLET的,本来下载这个APPLET包就比较慢了,再用第三方控制来打印就更麻烦了.

生成的东西直接交给IE来打的话,IE的打印功能也是很差的,郁闷
TinyJimmy 2006-04-05
  • 打赏
  • 举报
回复
在IE上打印? 又能打印出很好的效果? 然后还要通过Applet去控制打印机? 有些难度

1. 一般的做法是使用画布, 在上面画好了直接输出打印机
2. Applet控制打印机一般是被禁止的吧, 是否你的签名不正确, 所以applet无法访问本地资源
3. 实在不行还是建议用PDF, IE中打开一个PDF文件, 这样打印你能省去不少功夫
lcllcl987 2006-03-31
  • 打赏
  • 举报
回复
如果要打印我一般是让水晶报表来解决
楼主可以用水晶报表试一下
caoze 2006-03-31
  • 打赏
  • 举报
回复

Java 在打印方面做得还不够强。楼主可以试着将要打印的东西转换成图片或者是pdf档案,然后通过其他软件来打印。

我们现在是转成pdf后打印,省去了很多麻烦,java产生pdf文件倒是很简单。
wmzsl 2006-03-24
  • 打赏
  • 举报
回复
不好弄啊,帮你顶一下!
96310 2006-03-23
  • 打赏
  • 举报
回复
关注........
datalover 2006-03-23
  • 打赏
  • 举报
回复
关注........
lilygt 2006-03-22
  • 打赏
  • 举报
回复
我要学习
panpan221 2006-03-20
  • 打赏
  • 举报
回复
关注一下!
feifeirao 2006-03-20
  • 打赏
  • 举报
回复
ding
cql0007 2006-03-20
  • 打赏
  • 举报
回复
自己再UP
cql0007 2006-03-17
  • 打赏
  • 举报
回复
兄弟们,问题还没解决啊,不要都只做个记号啊

难道这个问题就没有什么好的解决方法吗?郁闷
killme2008 2006-03-17
  • 打赏
  • 举报
回复
打印图形?也许LZ该找位对JAVA(2d,3d,image io等技术)图形编程有了解的朋友问下
关注
nbzone 2006-03-16
  • 打赏
  • 举报
回复
up,先学习了,搜藏,帮顶
javaboat 2006-03-16
  • 打赏
  • 举报
回复
关注一下!
wmzsl 2006-03-15
  • 打赏
  • 举报
回复
学习!!
cql0007 2006-03-13
  • 打赏
  • 举报
回复
dogcai(dogcai)
哥们,我是打印图形啊,图形还要根据纸的大小还调整输出大小的啊.

加载更多回复(11)

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧