java實現列印功能

來源:互聯網
上載者:User
前言

在我們的實際工作中,經常需要實現列印功能。但由於曆史原因,Java 提供的列印功能一直都比較弱。實際上最初的 jdk 根本不支援列印,直到 jdk1.1 才引入了很輕量的列印支援。所以,在以前用 Java/Applet/JSP/Servlet 設計的程式中,較複雜的列印都是通過調用 ActiveX/OCX 控制項或者 VB/VC 程式來實現的,非常麻煩。實際上,SUN 公司也一直致力於 Java 列印功能的完善,而 Java2 平台則終於有了一個健壯的列印模式的開端,該列印模式與 Java2D 圖形包充分結合成一體。更令人鼓舞的是,新發布的 jdk1.4 則提供了一套完整的"Java 列印服務 API" (Java Print Service API),它對已有的列印功能是積極的補充。利用它,我們可以實現大部分實際應用需求,包括列印文字、圖形、檔案及預覽列印等等。本文將通過一個具體的程式執行個體來說明如何設計 Java 列印程式以實現這些功能,並對不同版本的實現方法進行分析比較。希望大家能從中擷取一些有益的提示。 Java 中的列印 2.1 Java 的列印 API

Java 的列印 API 主要存在於 java.awt.print 包中。而 jdk1.4 新增的類則主要存在於 javax.print 包及其相應的子包 javax.print.event 和 javax.print.attribute 中。其中 javax.print 包中主要包含列印服務的相關類,而 javax.print.event 則包含列印事件的相關定義,javax.print.attribute 則包括列印服務的可用屬性列表等。 2.2 如何?列印

要產生一個列印,至少需要考慮兩條: 需要一個列印服務物件。這可通過三種方式實現:在 jdk1.4 之前的版本,必須要實現 java.awt.print.Printable 介面或通過 Toolkit.getDefaultToolkit().getPrintJob 來擷取列印服務物件;在 jdk1.4 中則還可以通過 javax.print.PrintSerivceLookup 來尋找定位一個列印服務物件。 需要開始一個列印工作。這也有幾種實現方法:在 jdk1.4 之前可以通過 java.awt.print.PrintJob(jdk1.1 提供的,現在已經很少用了)調用 print 或 printAll 方法開始列印工作;也可以通過 java.awt.print.PrinterJob 的 printDialog 顯示列印對話方塊,然後通過 print 方法開始列印;在 jdk1.4 中則可以通過 javax.print.ServiceUI 的 printDialog 顯示列印對話方塊,然後調用 print 方法開始一個列印工作。 2.3 印表機對話方塊

2.3.1 Printable 的列印對話方塊

開始列印工作之前,可以通過 PrinterJob.printDialog 來顯示一個列印對話方塊。它給使用者一個機會以選擇應該列印的頁碼範圍,並可供使用者改變列印設定。它是一個本地對話方塊。

事實上,當從一個 Printable 對象進行一個列印工作時,列印對象並不知道需要列印多少頁。它只是不停地調用 print 方法。只要 print 方法返回 Printable.PAGE_EXISTS 值,列印工作就不停地產生列印頁,直到 print 方法返回 Printable.NO_SUCH_PAGE 時,列印工作才停止。

由於列印工作只有在列印完成後才進行準確的頁數計算,所以在對話方塊上的頁碼範圍是尚未初始化的 [1,9999]。我們可以通過構建一個 java.awt.print.Book 對象傳遞給列印對象;也可以通過指定的格式計算需要列印的頁數並傳遞給列印對象,使其準確地知道要列印多少頁。

2.3.2 ServiceUI 的列印對話方塊

與 Printable 的對話方塊不同的是,在 jdk1.4 提供 ServiceUI 的印表機對話方塊的預設行為已經用新的 API 更改了:預設情況下對話方塊不顯示。我們必須使用 ServiceUI 類調用 printDialog 方法建立如下所示的列印對話方塊。 Java 列印程式設計執行個體 3.1 列印文本

3.1.1 應用情境

假設我們需要列印一個表單的某個文本編輯域(可能只有幾行,也可能包含多頁)的內容,並且每頁最多列印 54 行,如何?呢。

3.1.2 解決方案

基本思路如下:首先我們需要實現 Printable 介面,然後按照每頁最多 54 行的格式計算共需要列印多少頁,當列印文本的按鈕被點擊時,執行相應的列印動作。列印文本的具體操作可通過 Graphics2D 的 drawString 方法來實現。

1、實現 Printable 介面

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.