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

2014-11-23 21:51:55 · 作者: · 浏览: 18
Flavor.URL里的内部类和MIME

image
Table 2. The DocFlavor.URL inner classes

  
  因为要通过URL打印gif图片,你可以用一下代码来获得实例
DocFlavor flavor = DocFlavor.URL.GIF;
  这个代码创建了一个DocFlavor实例,代表类是java.net.URL,MIME是image/gif。
表2列出的了DocFlavor.URL的类,那么其他六个内部类呢?我们等下来讨论一下SERVICE_FORMATTED,这之前,看看与二进制数据联系的所有三种类型(BYTE_ARRAY, INPUT_STREAM, and URL)相关的内部类。例如,如果你把gif储存到了一个字节数组里,那么你可以用以下代码:
DocFlavor flavor = DocFlavor.BYTE_ARRAY.GIF;
  正如有三个与二进制类型关联的内部类一样,与字符类型相关的另外三个类列在表3里

image
Table 3. CHAR_ARRAY, READER, and STRING


所以,如果你想打印储存在字符串中的文本数据,用以下代码: DocFlavor flavor = DocFlavor.STRING.TEXT_PLAIN;类似的,如果文本来自于网页上的HTML文档,用以下代码:
DocFlavor flavor = DocFlavor.STRING.TEXT_HTML;
  选择正确的打印机
  还记得我们在开始关于讨论DocFlavor之前关于打印机的那个精确支持你想要打印的数据类型的假设吗?这似乎看起来没有必要。实际上,你会对给你的打印机所支持的文档类型感到吃惊。例如,刚提到文本类型看起来似乎是最容易支持的,所以,如果你的程序要打印一个普通文本或者HTML文本,你可以随便选择一个打印服务并把它送到打印机那去。然而大部分打印机不支持基于文本的表现类,如果你试图向打印机发送它不支持的DocFlavor,会产生下面的异常:
Exception in thread "main"
sun.print.PrintJobFlavorException: invalid flavor at sun.print.Win32PrintJob.print(Win32PrintJob.java:290) at PrintTest.main(PrintTest.java:11)

  现在你已经知道了如何得到一个DocFlavor的引用而且我们也讨论了选择支持这个flavor的打印机重要性,接下来我来告诉你如何确定你使用的打印机支持它。我先前说过lookupPrintServices()允许你指定一个DocFlavor作为第一个参数,如果你指定的参数非空,那么方法会返回相应支持这个的打印机的实例。例如以下代码将返回可以通过URL来打印gif文件的打印机的列表:
DocFlavor flavor = DocFlavor.URL.GIF;
PrintService[] services = PrintSer