Java 当我用services.msc启动服务器时,在tomcat中打印不起作用(从客户端我们无法打印)

Java 当我用services.msc启动服务器时,在tomcat中打印不起作用(从客户端我们无法打印),java,tomcat,printing,jasper-reports,Java,Tomcat,Printing,Jasper Reports,我正在使用JasperReports 1.3.1打印报告。出于开发目的,我正在使用eclipse和tomcat 在eclipse中,当我运行应用程序时,下面的代码将显示列出的打印机设备和打印按钮。如果单击“打印”按钮,则报告将按所选设备打印 PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet(); printRequestAttributeSet.add(MediaSizeNam

我正在使用JasperReports 1.3.1打印报告。出于开发目的,我正在使用eclipse和tomcat

在eclipse中,当我运行应用程序时,下面的代码将显示列出的打印机设备和打印按钮。如果单击“打印”按钮,则报告将按所选设备打印

PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
printRequestAttributeSet.add(MediaSizeName.ISO_A5);
PrintServiceAttributeSet printServiceAttributeSet = new HashPrintServiceAttributeSet();
JRPrintServiceExporter exporter = new JRPrintServiceExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET, printRequestAttributeSet);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET, printServiceAttributeSet);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG, Boolean.FALSE);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, Boolean.TRUE);
exporter.exportReport();
在这里,我将jasperPrint作为一个参数传递给大家,这个参数是我手工构造的。它工作得很好

我的问题是:

我创建了war文件并粘贴到tomcat
ApacheSoftwareFoundation\tomcat 6.0\webapps
目录中,并使用services.msc启动了tomcat

此时,它不会显示列出的打印机详细信息,也不会打印

我放了一些记录器,我发现,代码挂在
exporter.exportReport()上
在这一行之后,代码没有执行。

请建议我如何使用jasper从客户端打印,这对我来说似乎是一个访问权限问题

打印机是网络打印机吗?然后确保您的Tomcat服务具有访问网络的权限。如果您将Tomcat作为windows服务启动,Tomcat将默认作为“本地系统用户”运行,并且没有访问网络的权限。这说明没有列出打印机,您无法打印。Eclipse由您启动,因此Eclipse进程拥有您的权限,可以访问网络和打印机

要更改Tomcat服务用户,请转到Windows服务-->右键单击Tomcat服务-->属性-->登录-->此帐户-->键入有权通过网络访问打印机的用户(可能是您:)的名称/密码


希望它能有所帮助,即使这个问题是几个月前提出的。

在我们类似的案例中,java.awt.Desktop.print出现了误导性的“连接到系统的设备无法运行”异常,即使是由我们的web应用程序创建的临时文件,除非Tomcat的服务是使用特定的用户凭据启动的。