java打印机API

java打印机API
java打印机API

1EUC 可用于编码各种亚洲字符集中的字符。

2类DocFlavor 封装了一个对象,该对象指定提供给DocPrintJob的打印数据的格式。"Doc" 是一个简短、易于发音的术语,指“部分打印数据”。打印数据格式,即"doc flavor" 由两方面的内容组成:

?MIME 类型。这是一个多用途的Internet 邮件扩展(MIME) 媒体类型(在RFC 2045和RFC 2046中定义),指定了如何解释打印数据。文本数据的字符集应该是IANA MIME 优先名称,如果未指定优先名称,则使用其规范名称。另外也可识别较早Java 平台版本所支持的一些历史名称。有关Java 平台所支持的字符编码的更多信息,请参阅字符编码。

?表示形式类名。这指定了提供实际打印数据的对象的完全限定类名,由Class.getName()方法返回。(因此byte[] 的类名是"[B",char[] 的类名是"[C"。)

DocPrintJob 通过接口Doc(javax.print接口Doc)获得其打印数据。Doc 对象允许DocPrintJob 来确定客户端可以提供的doc flavor。Doc 对象还允许DocPrintJob 获得一个doc flavor 的表示形式类的实例,然后DocPrintJob 可从中获得实际的打印数据。

3客户端格式化打印数据

有两大类的打印数据:客户端格式的打印数据和服务格式的打印数据。

对于客户端格式的打印数据,客户端确定或知道该打印数据格式。例如,客户端可能有JPEG 编码的图像、HTML 代码的URL 或以某种编码形式包含纯文本的磁盘文件(可能从外部源获得),并且需要某种方式向打印服务描述数据格式。

doc flavor 的表示形式类是JPS DocPrintJob 的一个管道,可从客户端获得字符或byte 序列。doc flavor 的MIME 类型是标准的媒体类型之一,通知如何解释字符或byte 序列。有关标准媒体类型的列表,请参阅Internet 编号分配机构(IANA) 的媒介类型目录。接口Doc 提供两个实用操作:getReaderForText和getStreamForBytes(),用来帮助Doc 对象的客户端提取客户端格式的打印数据。

对于客户端格式化打印数据,打印数据表示形式类通常是以下之一(虽然也允许使用其他表示形式类):

?字符数组(char[]) -- 打印数据由数组中的Unicde 字符所组成。

?String-- 打印数据由string 中的Unicde 字符组成。

?字符流(java.io.Reader) -- 打印数据由从流中读取(一直读取到流的末尾)的Unicode 字符组成。

?Byte 数组(byte[]) -- 打印数据由数组中的byte 所组成。这些byte 在doc flavor 的MIME 类型所指定的字符集中编码。如果MIME 类型未指定某个字符集,则默认的字符集是US-ASCII。

?Byte 流(java.io.InputStream) -- 打印数据由从流中读取(一直读取到流的末尾)的byte 所组成。这些byte 在doc flavor 的MIME 类型所指定的字符集中编码。如果MIME 类型未指定某个字符集,则默认的字符集是US-ASCII。

?统一资源定位符(URL) -- 打印数据由从URL 位置读取的byte 所组成。这些byte 在doc flavor 的MIME 类型所指定的字符集中编码。如果MIME 类型未指定某个字

符集,则默认的字符集是US-ASCII。

当表示形式类是一个URL 时,打印服务本身直接访问其URL 地址并下载文档,与客户端无关。该服务可以是在不同环境中执行的某种网络打印服务形式。这意味着不应使用URL 打印数据flavor 来打印位于受限制URL 处的文档,在这种URL 处,客户端可以看到该文档但打印机无法看到。这还意味着不应使用URL 打印数据flavor 来打印存储在本地文件中的文档,在客户端可独立访问的URL 处无法提供这种文档。例如,一个并非由HTTP 服务器或FTP 服务器所提供的文件。要打印这种文档,应该让客户端在该URL 或文件上打开一个输入流并使用输入流数据flavor。

4服务格式化打印数据

对于服务格式化打印数据,Java Print Service 实例确定打印数据格式。doc flavor 的表示形式类表示一个接口(例如RenderableImage 接口或Java printable 接口),DocPrintJob 调用该接口的方法来确定要打印的内容。doc flavor 的MIME 类型是特殊值"application/x-java-jvm-local-objectref" 时,指示客户端将提供对Java 对象的引用,该对象实现了以表示形式类命名的接口。此MIME 类型只是一个占位符;重要的是打印数据表示形式类。

对于服务格式化打印数据,打印数据表示形式类通常是以下之一(虽然也允许使用其他表示形式类):类DocFlavor 内的嵌套类为这些示例doc flavor 声明了预定义的静态常量DocFlavor 对象;可使用类DocFlavor 的构造方法来创建任意的doc flavor。

?RenderableImage 对象-- 客户端提供一个实现了接口RenderableImage的对象。打印机调用该接口内的方法来获得要打印的图像。

?Printable 对象-- 客户端提供一个实现了接口Printable的对象。打印机调用该接口内的方法来依次获得要打印的页面。对于每个页面,打印机都提供一个图形上下文,而客户端在该图形上下文中绘制的所有内容都会被打印。

?Pageable 对象-- 客户端提供一个实现了接口Pageable的对象。打印机调用该接口内的方法来依次获得要打印的页面。对于每个页面,打印机都提供一个图形上下文,而客户端在该图形上下文中绘制的所有内容都会被打印。

5、public static class DocFlavor.BYTE_ARRAY

extends DocFlavor

类DocFlavor.BYTE_ARRAY 提供了预定义的静态常量DocFlavor 对象,例如使用byte 数组(byte[]) 作为打印数据表示形式类的DocFlavor。

6、javax.print

类ServiceUI

https://www.360docs.net/doc/b410024532.html,ng.Object

javax.print.ServiceUI

public class ServiceUI

extends Object

此类是各种UI 便捷方法的集合,这些方法为浏览那些通过Java Print Service API 所查找的PrintService 提供了图形用户对话框。

该对话框遵从标准的模式,为用户提供继续/取消的选项,以及允许用户选择要使用并指定各种选择(如纸张大小和份数)的PrintService。

该对话框设计成通过可插入PrintService 的公共API 来与这些服务一同使用。

如果PrintService 提供了任意的供应商扩展,则用户可通过供应商提供的选项卡窗格Component 来访问这些扩展。鼓励这种供应商扩展使用Swing! 并支持其可访问性API。供应商扩展应该返回作为AttributeSet 一部分的设置。希望保持用户设置的应用程序应该使用这些设置来指定打印作业。注意,Java 打印服务的所有其他部分都不引用此类,并且不包括在与AWT 包的存在无关的配置文件中

7、printDialog

public static PrintService printDialog(GraphicsConfiguration gc,

int x,

int y,

PrintService[] services,

PrintService defaultService,

DocFlavor flavor,

PrintRequestAttributeSet attributes)

throws HeadlessException

为用户提供一个选择PrintService(打印机)的对话框。在应用程序指定的位置显示它,并且它是有模式的。如果指定的位置无效或者要使该对话框不可见,则在由实现所确定的位置显示它。该对话框阻塞其调用的线程,并且是有模式的应用程序。

该对话框可以包括一个选项卡窗格,该窗格具有在浏览PrintService 时,可以延迟方式从PrintService 的ServiceUIFactory 所获得的自定义UI。对话框会首先试图查找一个作为JComponent 的MAIN_UIROLE,然后查找作为Panel 的MAIN_UIROLE。如果没有ServiceUIFactory 或没有相符的角色,则自定义选项卡将为空或不可见。

如果用户“确定”了该对话框,则对话框返回用户选择的PrintService,如果用户“取消”了该对话框,则返回null。

应用程序必须传递要浏览的PrintService 的数组。该数组必须是非null 和非空的。通常应用程序只传递能够打印特定doc flavor 的PrintService。

应用程序可以传递最初显示的PrintService。可浏览服务的数组中必须包括非null 参数。如果此参数为null,则由实现选择某个服务。

可选地,应用程序可以传递要打印的flavor。如果这是呈现给用户的非mull 选择,则可针对该服务所支持的flavor 更好地验证该选择。应用程序必须为返回的用户选择传递PrintRequestAttributeSet。所调用的PrintRequestAttributeSet 可以为空,或者可包含特定于应用程序的值。

这些内容用于为最初显示的PrintService 设置初始设置。忽略那些PrintService 不支持的值。在用户浏览PrintService 时,将属性和值复制到新的显示内容。如果用户浏览的PrintService 不支持特定的属性-值,则将该服务的默认值用作要复制的新值。

如果用户取消了对话框,则返回的属性将不会反映用户进行的任何更改。此方法的典型基本用法是:

PrintService[] services = PrintServiceLookup.lookupPrintServices(

DocFlavor.INPUT_STREAM.JPEG, null); PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();

if (services.length > 0) {

PrintService service = ServiceUI.printDialog(null, 50, 50,

services, services[0],

null,

attributes);

if (service != null) {

... print ...

}

}

参数:

gc- 用于选择屏幕。null 意味着主屏幕或默认屏幕。

x- 对话框在屏幕坐标中的位置,包括边框

y- 对话框在屏幕坐标中的位置,包括边框

services- 可浏览的服务,必须不为null。

defaultService- 要显示的初始PrintService。

flavor- 要打印的flavor,或者为null。

attributes- 输入时为应用程序最初提供的首选项。这不能为null,但可以为空。

输出时为反映用户所作的更改的属性。

返回:

用户选择的PrintService,如果用户取消了对话框,则返回null。

抛出:

HeadlessException- 如果GraphicsEnvironment.isHeadless() 返回true。

IllegalArgumentException- 如果services 为null 或为空,或者attributes 为

null,或者初始的PrintService 未在可浏览服务的列表中。

8、文档类型规范

DocFlavor类表示了打印数据的格式,如JPEG 或PostScript。DocFlavor 对象由MIME 类型(描述了格式)和文档表示形式类名(指示如何将文档发送到打印机或输出流)所组成。应用程序使用DocFlavor 和属性集来查找某些打印机,这些打印机可打印由DocFlavor 所指定的文档类型且具有属性集所指定的功能。

使用API

典型的应用程序使用Java Print Service API 执行以下步骤来处理打印请求:1选择一个DocFlavor。

2创建一个属性集。

3找到一个可处理由DocFlavor 和属性集所指定的打印请求的PrintService。

4创建一个Doc对象,该对象封装DocFlavor 和实际的打印数据,这些打印数据可采用很多形式,包括:Postscript 文件、JPEG 图像、URL 或纯文本。

5从PrintService 获得一个由DocPrintJob表示的PrintJob。

6调用PrintJob 的print 方法。

以下代码示例说明了Java Print Service API 的典型用法:找到可在A4 大小的纸张上打印5 份Postscript 文档双面副本的打印机、根据某个返回的PrintService 创建PrintJob 并调

用print 方法。

FileInputStream psStream; try { psStream = new FileInputStream("file.ps"); } catch (FileNotFoundException ffne) { } if (psStream == null) { return; } DocFlavor psInFormat = DocFlavor.INPUT_STREAM.POSTSCRIPT; Doc myDoc = new SimpleDoc(psStream, psInFormat, null); PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); aset.add(new Copies(5)); aset.add(MediaSize.A4); aset.add(Sides.DUPLEX); PrintService[] services = PrintServiceLookup.lookupPrintServices(psInFormat, aset); if (services.length > 0) { DocPrintJob job = services[0].createPrintJob(); try { job.print(myDoc, aset); } catch (PrintException pe) {} }

请注意:在javax.print API 中,只有在方法中显式记录传递给方法的null 引用参数具有有意义的解释时,该参数才是正确的。否则就是错误的编码方式,并且可能立即或在稍后某时导致运行时异常。IllegalArgumentException 和NullPointerException 是典型的异常示例,并且是这种情况可接受的运行时异常。

9、javax.print

接口DocPrintJob

所有已知子接口:

CancelablePrintJob, MultiDocPrintJob

public interface DocPrintJob

此接口表示了一个可使用作业属性集打印指定文档的打印作业。可从PrintService 获得一个实现了此接口的对象

相关主题
相关文档
最新文档