浅谈 Java Printing
其实怎么说呢?在写这篇博文之前,我对java printing 可以说是一无所知的。以至于我在敲文字时,
基本上是看着api文档翻译过来的。这虽然看起来非常的吃力,但是我相信,有道大哥不会辜负我的。嘻
嘻!
Java Printing 技术,也就是我们平时所接触的打印,只不过是说可以用Java实现而已。
一、Java Printing 打印简介
Java Printing API能够使java应用程序实现相关的打印功能,如:
1、打印所有Java 2D 和 AWT 图形,包括复合的图形图像。
2、控制文档(如word文档)组成功能,如:柔软整理、反序打印 和 小册子打印。
3、调用打印机特定的功能,如:双面打印装订
4、能在所有平台上进行打印,如:windows、Solaris(我想这也是Java具有跨平台的优点体现)
二、Java Printing 相关类和接口
1、接口
Printable :该接口由每一个页面 painter 实现,应用程序通过打印系统调用print方法,以呈现一个页面
Pageable :该接口由即将被答打印系统打印的文档(document)实现,通过该接口,系统能够知道文档的页面 及每页
即将以什么格式打印
PrinterGraphics :一个用来呈现页面的 painter 的Graphics2D对象,需要实现该接口。同时,通过该接
口,还可以获得控制打印的PrinterJob对象。
2、类
Book :实现了Pageable接口,代表一个拥有不同页面格式和页面painter的文档,该类通过Pageable接
口和PrintJob进行交互。
PageFormat:描述了打印页面的大小(如:A4,A3)及打印方向
Paper :描述了每一张纸的物理特性
PrintJob :控制打印的主要类。应用调用PrintJob方法去启动一个任务,向用户展示打印框,并打印。
三、Java打印的相关概念
Java 打印是基于一个回调打印模型的。即当页面被打印时,由打印系统(非应用程序)控制。应用程
序只是提供打印文档的相关信息,而当打印系统需要呈现页面时,打印系统就会向应用程序索取。
.......
实现打印,需要做些什么?
一个应用程序向支持打印功能,有以下2点需要实现:
1、任务控制 ----- 初始化(启动)、管理打印任务
2、成像 ----- 当打印系统请求时,要能呈现一个页面
什么是任务控制?
在一个应用程序中,用户通常是通过点击一个按钮或者一个菜单来启动一个打印任务。当一个打印操作
被用户触发,应用程序就会创建一个 PrintJob 对象并用该对象管理打印进程。
应用程序 负责设置打印任务,向用户展示打印窗格并启动打印任务。
什么是成像?
当一个文档被打印时,当打印系统请求时,应用程序必须呈现每一页面。为了实现这个机制,应用程序
提供一个实现Printable接口的 page painter ,当打印系统需要呈现一个页面时,它就会调用 page painter
的print 方法。
当page painter的print 方法被调用时,该方法是通过传递一个图形上下文来呈现图像页面。该方法
同时也传递一个 PageFormat 对象来指定页面的几何布局 和 一个 整型数 来指定页面在打印任务中的下标,即页码。
打印系统支持Graphics和Graphics2D呈现。如果想打印 Graphics 2D形状,文本,图形等,可以在
print方法中将 Graphics 对象强制转换为 Graphics2D 对象。
什么是Page Painter?
Page Painter 的主要任务就是通过 打印系统提供的 Graphics 上下文对象 去呈现每个页面。一个
Page Painter 实现Printable接口的print方法。
因为许多打印机无法打印整个页面的所有地方,顾print方法pageFormate 参数指定页面可以成像的区域。