在Java中輕松打印文檔
有關在Java中實現文檔打印的典型說法描述了一個復雜的過程,它要求對字體進行測定、對文本進行解析并將結果繪制到一個Graphics對象中。這個過程似乎執行起來相當困難,并且它和用于文檔視頻顯示的高級編程方法不一致。如果你想要花費大量的精力來完成這個過程,那么你就不會首先想到要在Java中編程。
你一定不想自己完成測定、解析和繪制過程,而是希望通過簡單地將文檔發送到一個能為你處理所有事情的對象中來完成這個任務。本文就將介紹這樣一個對象――DocumentRenderer,它將一個文檔作為方法中的一個參數并處理指定任務來完成打印。比如,用這個類來顯示一個HTML文檔需要兩個步驟:構造一個DocumentRenderer類的實例并將HTML文檔作為參數發送到print(HTMLDocument)方法中。DocumentRenderer類用于處理打印該文檔所必需的開銷,包括顯示一個打印對話框以及格式化文本。
我們設計了這個DocumentRenderer類以便利用這個已經在Java中可用的高級文本性能。 根據可重用和可擴展類的原則,我們使用了一些現有的對象(Java.Swing.Text Package用它來對顯示結果進行格式化)使打印結果能夠顯示在紙上。用這種方法設計DocumentRenderer使我們能夠用比前面討論過的方法少寫近200行的代碼來建立這個類。
除了能少寫代碼之外,使用DocumentRenderer 實現中的現有對象還提供了一些額外的功能使得該類更加通用。在最初設計這個類的時候,我們只是打算將HTML文檔打印出來。而添加一些功能來打印其他類型的文檔則是后來的想法。當我們發現只需在用于HTML 打印類的代碼中加上約6行的額外代碼就可以打印一個Rich Text Format文檔時,便在這個項目的后期添加了這個功能。