2009-12-14 153 views
1

我有一個Enterprise Java Web應用程序,所有業務都從客戶端 - 服務器應用程序遷移。所以我需要適應所有需求,包括在每個客戶端上打印(使用點矩陣/純文本)。在Java Web應用程序上打印服務

客戶端在分離客戶端上的打印要求是他們必須在處理完成後馬上得到報告,比如打印一些系統信息。在客戶端服務器上打印很容易,但是當我遷移到Web應用程序時,我們使用嵌入到應用程序中的服務器/ applet服務。所以當客戶端打開瀏覽器時,applet將被初始化。

它可以工作,但問題太多。有時,applet在客戶端沒有采取行動的情況下突然關閉,所以applet自動從數據庫中檢查排隊報告失敗。對這種情況有什麼建議嗎?

我使用Spring Framework作爲業務層。

回答

4

幾年前我有同樣的問題。

這就是我所做的。

由於我的處理是在服務器上進行的,所以我知道交易何時完成。所以我做的是直接從服務器發送打印請求。客戶端打印機在服務器中進行配置,並且由於它在局域網中使用,因此可以輕鬆訪問該打印機。這樣我就完成了與小應用程序有關的所有問題,權衡是他們只能在辦公室打印,但在我的情況下很好,不一定適用於您,請嘗試一下。

UPDATE

在我的情況下,需要沿國家不同部門的打印。

每個部門都有針對該任務的特定唯一打印機。因此,我所做的是將該打印機安裝在服務器文件系統中(在Unix中是/ Volumes/printers/EPSON-12345,在Windows中是x:\ printers \ EPSON-12345)當用戶在webapp中完成事務後,我啓動在服務器中打印請求。 Java根本沒有任何問題打印到本地打印機,並且由於映射打印機被視爲本地(即使它是遠程打印機),您不需要進一步的授權或任何特殊的東西。

因爲我知道具體的打印機是如何映射的,而且我知道是哪種交易,所以我知道在哪裏打印。

最後,我使用一個屬性文件來允許打印機隨時更改和/或添加更多的打印機。

我不太記得細節,但它是在服務器中是這樣的:

ResourceBundle bundle = ResourceBundle.getBundle("printers"); 
String serviceName = bundle.getString("MEXICO.CITY.PRINTER"); 

PrintService service = PrintService.find(serviceName); 
service.print(// document and etc); 

但是,這是近4年。以前所以我不記得確切的細節,但我的程序仍在運行:)

你可以閱讀更多關於java中的打印服務here。它比它的樣子簡單得多。

+0

+.1創意解決方案 – Pierreten 2009-12-14 06:37:42

+0

@Pierreten:那是一個符號+1嗎? :-o是的..必要性是所有發明的母親(因此是創造力)。 – OscarRyz 2009-12-14 06:52:00

+0

嗯案件幾乎相同,但如何配置服務器的客戶端打印機併發送打印請求到客戶端? – 2009-12-14 06:58:32

1

等方式實現了良好的效果:

  • 在服務器上生成一個PDF(利用iText,或更好的JasperReports),並把它下載到客戶端,在那裏他可以打印。
  • 有一個print.css,並生成適合打印的網頁。
0

如果您不希望客戶端瀏覽器編排打印(例如,通過發送二進制BLOB和用戶必須設置的自定義MIME類型發送到打印機),則必須讓服務器做到這一點。

這通常意味着用戶必須將默認打印機連接到其配置文件,並且服務器知道如何將打印件發送到該打印機。很多的樂趣:)

相關問題