2009-12-14 28 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类型发送到打印机),则必须让服务器做到这一点。

这通常意味着用户必须将默认打印机连接到其配置文件,并且服务器知道如何将打印件发送到该打印机。很多的乐趣:)