注册通行证 用户名 密码
  • 文章投稿
  • 博客
  • 论坛
  • 设为首页
  • 加入收藏
jztop.com网络技术
  • 首页
  • | iT新闻
  • | 操作系统
  • | 组网建网
  • | 网络安全
  • | 程序开发
  • | 办公一族
  • | 工具软件
  • | 网页制作
  • | 多媒体制作
  • | 网吧技术
  • | 服务器
  • | 专题教程
Vista | 软件评测 | 系统备份 | 优化 | 进程 | 聊天 | 病毒 | Linux | 黑客 | 防火墙 | 数据库 | Web开发 | Java | Word | 游戏 | 32位开发 | 移动开发
当前位置:首页 > 程序开发 > Java 内容正文:Java高级编程:使用打印服务API

Java高级编程:使用打印服务API

发布时间:2006-05-08 16:13:10 来源: 网友评论 0 条

Java自从问世以来在各方面发展迅速,但是一直以来,打印输出是java最弱的方面。事实上,java1.0不支持任何打印功能。Java1.1在java.awt包里包含了一个叫做PrintJob的类,但是这个类提供的打印功能十分粗糙和不可靠。当java1.2问世,它围绕PrinterJob设计了一个完整独立的打印机制(叫做java2D printing API),并且在java.awt.print包里定义了一些新的类和接口。这些使得基于PrintJob打印机制(就是AWT printing)基本荒废,虽然PrintJob从未被抨击而且至少在这篇文章里仍然是一个提供技术的类。
  在J2SE1.3里当PrintJob的功能扩展到可以通过在java.awt包里的JobAttributes 和PageAttributes两个类设定工程和页面的属性时发生了一些额外的改变。随着J2SE1.3的发布,打印功能相应的得到了完善;但是在混合使用这两种完全不同的打印机制的时候仍然存在一些问题。比如,这两种机制使用java.awt.Graphics这个类的一个接口来展现打印内容,意味着所有要打印的东西都必须用一张图片表示。另外,完善的PrintJob提供了很有限的工程相关属性的设置;这两种机制都没有办法通过程序来选择目标打印机。
  Java打印最大的改变来自于J2SE的发布带来的Java打印服务API。这个第三代Java打印支持接口突破了先前提到的使用javax.print包的PrintService和DocPrintJob接口的局限性。因为新的API就是以前两种旧的打印机制定义的功能函数的一个父集,它是目前我们常用的方法并且是这篇文章的焦点。
  更深入来说,以下的步骤包含了怎么使用这个新的Java打印服务API:
  1.定义打印机,限制那些返回到提供你要实现功能的函数的列表。打印服务实现了PrintService接口.
  2.通过调用接口中定义的createPrintJob()方法创建一个打印事件,作为DocPrintJob的一个实例。
  3.创建一个实现Doc接口的类来描述你想要打印的数据 , 你也可以创建一个PrintRequestAttributeSet的实例来定义你想要的打印选项。
  4.通过DocPrintJob接口定义的printv()方法来初始化打印,指定你先前创建的Doc,指定PrintRequestAttributeSet或者设为空值。
  现在你可以检查每一步并且试着完成它们。
  定义打印服务
  你可以使用在PrintServiceLookup类中定义的三种静态方法中的一种来定义。最简单的一种就是lookupDefaultPrintService(),正如它的名字一样,它返回一个你默认的打印机:
PrintService service = PrintServiceLookup.lookupDefaultPrintService();
  虽然用这个办法很简单也很方便,用它来选择你的打印机意味着用户的打印机一直都支持你的程序所要精确传输的数据输出。实际上,你真正想要的是那种可以处理你想要的数据的类型并且可以支持你要的特征例如颜色或者两边打印。为了从列表中中返回你所要求的特殊功能支持的打印机,你可以使用剩下两个方法中的lookupPrintServices() 或者lookupMultiDocPrintServices()。
  lookupPrintServices()方法有两个参数:一个DocFlavor的实例和实现AttributeSet接口的实例。
  你马上将看到,你可以使用两者中任意一个来限制返回的打印机,但是lookupPrintServices()允许你指定这两个参数为空值。如果把两者都设为空,那么你得到的返回值将是任意一个可用的打印机。在这种情况下,你并不需要查看PrintService中定义的方法,其中一个getName()方法返回了一个字符串,代表打印机的名字。你可以编译下面的代码来列出你的系统现有的打印机:
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
for (int i = 0; i < services.length; i++)
{
  System.out.println(services[i].getName());
}

  例如你的系统名为PrintServer,下面有Alpha, Beta, 和Gamma打印机,用以上代码可以得到以下输出:
//PrintServer/Alpha
//PrintServer/Beta
//PrintServer/Gamma

  现在查看那些你可以传给lookupPrintServices()方法的参数来看看如何返回拥有特殊功能的打印机。
  DocFlavor
  第一个你可以指定的参数是一个DocFlavor类的实例,它描述了将要打印的数据的类型和数据如何存储。在大部分情况下,并不需要去创建一个新的实例因为Java包含了很多预先定义的实例,使得你可以用它们来传给lookupPrintServices()。然而,我们还是来看一下DocFlavor的结构和方法来探讨打印服务如何使用这个实例。
  创建DocFlavor实例需要的两个参数都是字符串,一个是MIME(Multipurpose Internet Mail Extensions)类型另一个是类的名字。MIME类型被用于描述数据类型。例如,你要打印一个gif文件,你需要使用MIME类型是image/gif的DocFlavor。相类似,如果你要打印HTML文件里的文本信息要使用MIME类型似text/plain或者text/html。

相关文章
  • ASP.NET Atlas对JavaScript的扩展
  • 深入浅出Java堆的管理--垃圾回收
  • JAVA篇:EJB 3.0开发指南之依赖注入
  • java中几个重要的知识细节!
  • Java数据对象(JDO)的前世今生
【评论】【收藏本文】【打印】【关闭】
上一篇文章:用Java开源项目JOONE实现人工智能编程
下一篇文章:利用Java语言实现数据报编程之单播
讨论区
查看
已有 0 位对此新闻感兴趣的网友发表了看法
匿名发表
注册通行证 登陆
图文阅读推荐
Java控件设计入门
Java控件设计入门
推荐阅讯
  • 用Java开发3D游戏之创建场景
  • Java 理论与实践: 伪typedef反模式
  • Java应用中的反模式开发介绍
  • 使用Java进行Web开发的随想
  • 最大化J2EE和数据库交互操作的性能
  • JAVA几个常见错误简析(下)
  • Jave学习精华:Jsp小结
  • Java桌面应用程序设计:SWT简介(1)
  • 用Java开源项目JOONE实现人工智能编程
  • Java核心类库GNU Classpath 0.90发布
阅读排行
  • 1.Java连接SQL Server 2000
  • 2.Java文件操作详解
  • 3.Java控件设计入门
  • 4.Java操作Excel电子表格
  • 5.Java: JNI完全手册
  • 6.Java命令行简介
  • 7.开发J2EE应用应遵循的几点原则
  • 8.Servlet与Javabean配置
  • 9.Java规则引擎与其API应用详解
  • 10.CLASSPATH详解
专题教程
  • 大话G游 专题:手机病毒揭密
  • ARP攻击防范与解决方案 路由故障处理手册
  • Picasa中文版_Picasa教程 专题:清除流氓软件
  • Firefox专题 seo搜索引擎优化专区
  • 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
  • 杀毒软件反被病毒杀 连"救命"都不能喊
  • 金山ARP防火墙
  • 还原卡神话破灭“机器狗”病毒来势汹汹
  • cctv经济半小时:你的手机现在安全吗?
  • 新挂马方式开始流行 ARP挂马称雄局域网
  • 木马和病毒清除的通用解法
  • IP地址不再冲突 查找ARP攻击者元凶
  • 教你几招识别和防御Web网页木马
  • 分析:封杀BT只是暂时的止痛药
  • QQ爆危险漏洞,“QQ游戏邀请大盗”邀请你玩病
关于我们 | 诚聘英才 | 联系我们 | 版权声明 | 网站大事 | 网站地图 | 意见建议
CopyRight 2005-2007 Jztop.Com 版权所有 未经许可 请勿转载