淺談 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 對象強制轉換爲 Graphics 2D 對象。
什麼是Page Painter?
Page Painter 的主要任務就是通過 打印系統提供的 Graphics 上下文對象 去呈現每個頁面。一個
Page Painter 實現Printable接口的print方法。
因爲許多打印機無法打印整個頁面的所有地方,顧print方法pageFormate 參數指定頁面可以成像的區域。