Java高级编程_使用打印服务API 天极网.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《Java高级编程_使用打印服务API 天极网.pdf》由会员分享,可在线阅读,更多相关《Java高级编程_使用打印服务API 天极网.pdf(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java高级编程:使用打印服务API _天极网http:/ 16:17:03天极网 开发频道Java高级编程:使用打印服务APIJava高级编程:使用打印服务API2005-08-29 09:13作者:ice_x编译出处:matrix责任编辑:方舟天极软件专题专区精选 到天极软件“读编交流区”畅所欲言Google专区POPO专区QQ专区 QQ挂机了解Web2.0Flash MX 视频教程Photoshop视频教程网页设计视频教程照片处理数字暗房PPT动画演示教程Excel动画教程集Word动画演示教程Windows Vista专区特洛伊木马专区黑客知识教程专区防火墙应用专区注册表应用专区Win
2、dows API开发专区 网络编程专区VB数据库编程专区图像处理与多媒体编程Java自从问世以来在各方面发展迅速,但是一直以来,打印输出是java最弱的方面。事实上,java1.0不支持任何打印功能。Java1.1在java.awt包里包含了一个叫做PrintJob的类,但是这个类提供的打印功能十分粗糙和不可靠。当java1.2问世,它围绕PrinterJob设计了一个完整独立的打印机制(叫做java2D printing API),并且在java.awt.print包里定义了一些新的类和接口。这些使得基于PrintJob打印机制(就是AWT printing)基本荒废,虽然PrintJob从
3、未被抨击而且至少在这篇文章里仍然是一个提供技术的类。在J2SE1.3里当PrintJob的功能扩展到可以通过在java.awt包里的JobAttributes和PageAttributes两个类设定工程和页面的属性时发生了一些额外的改变。随着J2SE1.3的发布,打印功能相应的得到了完善;但是在混合使用这两种完全不同的打印机制的时候仍然存在一些问题。比如,这两种机制使用java.awt.Graphics这个类的一个接口来展现打印内容,意味着所有要打印的东西都必须用一张图片表示。另外,完善的PrintJob提供了很有限的工程相关属性的设置;这两种机制都没有办法通过程序来选择目标打印机。Java打
4、印最大的改变来自于J2SE的发布带来的Java打印服务API。这个第三代Java打印支持接口突破了先前提到的使用javax.print包的PrintService和DocPrintJob接口的局限性。因为新的API就是以前两种旧的打印机制定义的功能函数的一个父集,它是目前我们常用的方法并且是这篇文章的焦点。更深入来说,以下的步骤包含了怎么使用这个新的Java打印服务API:1.定义打印机,限制那些返回到提供你要实现功能的函数的列表。打印服务实现了PrintService接口.2.通过调用接口中定义的createPrintJob()方法创建一个打印事件,作为DocPrintJob的一个实例。3.
5、创建一个实现Doc接口的类来描述你想要打印的数据,你也可以创建一个PrintRequestAttributeSet的实例来定义你想要的打印选项。IT嘉年华编辑推荐软件下载热门 推荐12345678910网友关注软件 资料 游戏1234567软件资讯:设计 工具 系统 开发 安全 办公 陶吧 IT教育 Vista频道|下载中心:酷我音乐盒 腾讯QQ 攒机升级宝典 手机选购指南笔记本选购宝典 手机图片手机电子书 电脑主题和美化数码摄影论坛 精美壁纸大全有奖活动看图找茬,练眼力,赢积分 IE8浏览器有奖活动群乐家园个性形象大赛 QQ空间代码 windPowerPoint 魔兽争霸DOTA论坛 地下城
6、与勇士论坛下载瑞星2009下载 炫我手机最新贴有奖活动成语接龙游戏 龙蛇演义第七届中国软件工程大会在北京召开梭子鱼下一代防火墙新增多核处理功能卡西亚IT自动化管理走进“北上深”中国电信天翼空间合作伙伴交流论坛厦门召开2010年度中国CMMI咨询机构前十强揭晓STTV-视通卫星网络电视(带自由录像功 4663409瑞星杀毒软件3749744Adobe Photoshop CS 23608621比特彗星(BitComet)2102312网页迅雷(Web迅雷)19744864WebWatchBot1708738暴风影音1684585迅雷(Thunder)1496296金山毒霸2011杀毒软件1491
7、228网址导航软件1454959Avant Browser12185次大赢家股博士2360个股评测平台(股 97次/周无忧解锁大师0次/周金骏出纳软件1359次/周石子店铺帐本1次/周麦风店铺帐本23次/周itv卫星直播网络电视1268次/周首页 产品库 评测 行情 新闻|手机 数码 笔记本 台式机 DIY硬件 数字家庭 数码相机 办公外设|软件 下载 游戏 开发|社区 更多登录|注册产品搜索Java高级编程:使用打印服务API _天极网http:/ 16:17:034.通过DocPrintJob接口定义的printv()方法来初始化打印,指定你先前创建的Doc,指定PrintRequestA
8、ttributeSet或者设为空值。现在你可以检查每一步并且试着完成它们。注意在这篇文章里,我将交替使用打印机和打印服务,因为在大部分情况下,打印服务不亚于一台真实的打印机。一般的打印服务反映了理论上可以发送到不仅仅是打印机的的输出。举例来说,打印服务也许根本不能打印东西但是可以往磁盘上的文件写数据。换句话说,所有的打印机可以看成是特殊的打印服务,但是并不是所有打印服务和打印机有联系。就像你一般把你的文本送到打印机那里一样,我有时候使用更为简便的打印机这个名词来代替技术上更精确的打印服务。定义打印服务你可以使用在PrintServiceLookup类中定义的三种静态方法中的一种来定义。最简单的
9、一种就是lookupDefaultPrintService(),正如它的名字一样,它返回一个你默认的打印机:PrintService service=PrintServiceLookup.lookupDefaultPrintService();虽然用这个办法很简单也很方便,用它来选择你的打印机意味着用户的打印机一直都支持你的程序所要精确传输的数据输出。实际上,你真正想要的是那种可以处理你想要的数据的类型并且可以支持你要的特征例如颜色或者两边打印。为了从列表中中返回你所要求的特殊功能支持的打印机,你可以使用剩下两个方法中的lookupPrintServices()或者lookupMultiDoc
10、PrintServices()。lookupPrintServices()方法有两个参数:一个DocFlavor的实例和实现AttributeSet接口的实例。你马上将看到,你可以使用两者中任意一个来限制返回的打印机,但是lookupPrintServices()允许你指定这两个参数为空值。如果把两者都设为空,那么你得到的返回值将是任意一个可用的打印机。在这种情况下,你并不需要查看PrintService中定义的方法,其中一个getName()方法返回了一个字符串,代表打印机的名字。你可以编译下面的代码来列出你的系统现有的打印机:PrintService services=PrintServi
11、ceLookup.lookupPrintServices(null,null);for(int i=0;i 开发频道Java高级编程:使用打印服务APIJava高级编程:使用打印服务API2005-08-29 09:13作者:ice_x编译出处:matrix责任编辑:方舟表现类MIME类型描述将要打印的数据的类型,表现的类则表示如何让打印服务得到这些数据。DocFlavor包含了几个静态的内部类,每一个相对应一个表现类和如何装载要打印得数据。表1中列出了上面提到的内部类和表现类。注意在SERVICE_FORMATTED(一会我会更详细地解释)旁边,每一个和binary或者 character相
12、对应。事实上,这些差别是人为的,因为character数据类型本身就是一种特殊的binary类型。这种情况下,我们说的二进制(binary)数据包括人们可以看懂的字符和一些格式化的字符比如tabs,换行回车等。当然,这些差别很重要,反映出面向字符的表现类并不适合存储二进制数据。例如,你不会用字符队列或者字符串来保存一个gif文件,你也不能通过Reader接口来访问它。另一方面,因为字符也是一种特殊的二进制数据,它完全适合储存文本信息到字节数组里或者通过InputStream或者一个URL来访问它。Table 1.DocFlavor的表现类上面定义的任何一个静态内部类相对应一个表现类,但是请记住
13、我说过每一个DocFlavor的实例通过一个表现类和一个MIME来确认要打印的数据的类型。要访问这样一个实例,你要通过表1总列出的内部类。例如,我们假设你要打印一个在网上通过URL访问的gif文件,这样的话,就选择表现类是.url,对应的在DocFlavor中的静态类就是URL类。如果你打开那个内部类的文档,你会发现其实它定义了一系列静态的内部类,每一个对应一种打印机支持的MIME类型。表2描述了在DocFlavor.URL里的内部类和MIME软件资讯:设计 工具 系统 开发 安全 办公 陶吧 IT教育 Vista频道|下载中心:酷我音乐盒 腾讯QQ 攒机升级宝典 手机选购指南笔记本选购宝典
14、手机图片手机电子书 电脑主题和美化数码摄影论坛 精美壁纸大全首页 产品库 评测 行情 新闻|手机 数码 笔记本 台式机 DIY硬件 数字家庭 数码相机 办公外设|软件 下载 游戏 开发|社区 更多产品搜索Java高级编程:使用打印服务API _第2页_天极网http:/ 16:18:45Table 2.The DocFlavor.URL inner classes因为要通过URL打印gif图片,你可以用一下代码来获得实例DocFlavor flavor=DocFlavor.URL.GIF;这个代码创建了一个DocFlavor实例,代表类是.URL,MIME是image/gif。表2列出的了Do
15、cFlavor.URL的类,那么其他六个内部类呢?我们等下来讨论一下SERVICE_FORMATTED,这之前,看看与二进制数据联系的所有三种类型(BYTE_ARRAY,INPUT_STREAM,and URL)相关的内部类。例如,如果你把gif储存到了一个字节数组里,那么你可以用以下代码:DocFlavor flavor=DocFlavor.BYTE_ARRAY.GIF;正如有三个与二进制类型关联的内部类一样,与字符类型相关的另外三个类列在表3里 Table 3.CHAR_ARRAY,READER,and STRING所以,如果你想打印储存在字符串中的文本数据,用以下代码:DocFlavor
16、 flavor=DocFlavor.STRING.TEXT_PLAIN;IT嘉年华编辑推荐软件下载热门 推荐12345678910网友关注软件 资料 游戏12345678910装机推荐聊天 腾讯QQ MSN Messenger Skype语音聊天 移动飞信Fetion 下载 迅雷5 网际快车FlashGet 屁屁狗PPgou eMule verycd(电驴)影音 暴风影音 RealPlayer 千千静听 酷狗KuGoo 系统 卡巴斯基 WinRAR Windows优化大师 Vista优化大师 中文 搜狗拼音输入法 谷歌拼音输入法 万能五笔输 入法 紫光华宇拼音输入法 网络 傲游Maxthon浏
17、览器 Firefox(火狐浏览器)Foxmail POCO 2007 系统 Adobe Photoshop 光影魔术手 Q宠保姆 酷我音乐盒 有奖活动看图找茬,练眼力,赢积分 IE8浏览器有奖活动群乐家园个性形象大赛 QQ空间代码 windPowerPoint 魔兽争霸DOTA论坛 地下城与勇士论坛下载瑞星2009下载 炫我手机最新贴有奖活动成语接龙游戏 龙蛇演义第七届中国软件工程大会在北京召开梭子鱼下一代防火墙新增多核处理功能卡西亚IT自动化管理走进“北上深”中国电信天翼空间合作伙伴交流论坛厦门召开2010年度中国CMMI咨询机构前十强揭晓STTV-视通卫星网络电视(带自由录像功 46634
18、09瑞星杀毒软件3749744Adobe Photoshop CS 23608621比特彗星(BitComet)2102312网页迅雷(Web迅雷)19744864WebWatchBot1708738暴风影音1684585迅雷(Thunder)1496296金山毒霸2011杀毒软件1491228网址导航软件1454959世界之窗浏览器(Theworld)36次/周Desmume重编译0次/周Avant Browser12185次大赢家股博士2360个股评测平台(股 97次/周无忧解锁大师0次/周金骏出纳软件1359次/周石子店铺帐本1次/周麦风店铺帐本23次/周itv卫星直播网络电视1268次
19、/周恰比盒子0次/周Java高级编程:使用打印服务API _第2页_天极网http:/ 16:18:45类似的,如果文本来自于网页上的HTML文档,用以下代码:DocFlavor flavor=DocFlavor.STRING.TEXT_HTML;选择正确的打印机还记得我们在开始关于讨论DocFlavor之前关于打印机的那个精确支持你想要打印的数据类型的假设吗?这似乎看起来没有必要。实际上,你会对给你的打印机所支持的文档类型感到吃惊。例如,刚提到文本类型看起来似乎是最容易支持的,所以,如果你的程序要打印一个普通文本或者HTML文本,你可以随便选择一个打印服务并把它送到打印机那去。然而大部分打印
20、机不支持基于文本的表现类,如果你试图向打印机发送它不支持的DocFlavor,会产生下面的异常:Exception in thread mainsun.print.PrintJobFlavorException:invalid flavor atsun.print.Win32PrintJob.print(Win32PrintJob.java:290)atPrintTest.main(PrintTest.java:11)现在你已经知道了如何得到一个DocFlavor的引用而且我们也讨论了选择支持这个flavor的打印机重要性,接下来我来告诉你如何确定你使用的打印机支持它。我先前说过lookupP
21、rintServices()允许你指定一个DocFlavor作为第一个参数,如果你指定的参数非空,那么方法会返回相应支持这个的打印机的实例。例如以下代码将返回可以通过URL来打印gif文件的打印机的列表:DocFlavor flavor=DocFlavor.URL.GIF;PrintService services=PrintServiceLookup.lookupPrintServices(flavor,null);另外,如果你的程序已经获得了打印服务的实例,而你想知道它是否支持另一种特定的flavor,你可以调用isDocFlavorSupported()方法。在下面的代码里,将得到一个默
22、认打印机的引用,如果不能打印gif就会出现错误信息:PrintService service=PrintServiceLookup.lookupDefaultPrintService();DocFlavor flavor=DocFlavor.URL.GIF;if(!service.isDocFlavorSupported(flavor)System.err.println(The printer does not support the appropriate DocFlavor);AttributeSet正如你看到的,DocFlavor描述打印数据而且可以用来确定打印服务是否支持这种数据。然
23、而,你的程序需要选择一个基于那些支持的元素的打印机。例如,你要打印图片用不同的颜色来描述不同的信息,你想知道提供的服务是否支持彩色打印,如果不,那么要么禁止它使用或者要求提供一个黑白图片。类似彩色打印,两边打印或者使用不同的定位取决于打印机本身的属性,而javax.print.attribute包包含了许多你可以用于描述这些属性的包和接口。其中一个接口是前面提到的lookupPrintServices()中第二个参数AttributeSet。正如你愿,它返回属性的集合,在调用lookupPrintServices()指定一个不为空的值将返回支持这些属性的打印服务。换句话说,如文章排行本周 本月
24、 最新更新12345678910Gary Beck:Oracle在产品方面硕果累累Jeff Henley:甲骨文公司的发展战略2010甲骨文全球大会在北京隆重拉开帷幕伍宏益:打开SDLC的黑盒子,透明化开发过程千名管理者SD2C 2010纵论技术大势天津市百强物流企业港强集团携手宏景eHR英大财险:人力资源信息化之路联通网厅饕餮宴,iPhone、话费轻松得中国航油借助宏景eHR,构建高绩效组织甲骨文的云策略:构建现代数据中心架构Java高级编程:使用打印服务API _第2页_天极网http:/ 16:18:45返回开发频道首页共4页。上一页1234下一页挑错 收藏到天极收藏夹 关闭 挑错 收藏
25、到天极收藏夹 关闭果DocFlavor和 AttributeSet都不为空,那么方法将返回那些这两种属性都支持的打印机AttributeAttributeSet 是属性的集合,一个显而易见的问题是如何指定属性的值呢?javax.print.attribute包里同时含有一个叫Attribute的接口,你马上可以看到通过调用add方法来给AttributeSet创建一个Attribute实例来获得这个集合。在javax.print.attribute.standard包里定义了大量你将要用到的接口。在之前,你可以查看javax.print.attribute这个包里的其他接口。属性模块目前为止,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java高级编程_使用打印服务API 天极网 Java 高级 编程 使用 打印 服务 API
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内