我在尝试直接(没有任何对话框)在Java Web应用程序(在Websphere Application Server 6.1上)和Java程序(都共享一些代码)时遇到问题包含此打印代码)与打印机。打印机位于Windows主机上,Web应用程序和非Web应用程序在Linux上运行。
我已经读过它可能是一个权限问题,因为我会尝试使用Linux中的用户进行打印,这些用户在打印系统(Windows)上不存在或者没有持久性。
服务器和Java应用程序是以root用户身份运行的,所以我被困在这里(如果这是一个权限问题),因为客户端告诉我,打印服务器上有权限的用户是另一个用户。我知道允许在该服务器上打印的用户名。
我认为如果可以通过Samba将Linux的root用户与Windows(具有打印权限)的用户相关联,我认为可以这样做。但是我无法做到这一点(我对Samba的知识非常了不起)。即使我可以这样做,我也不确定它是否允许代码在Windows机器中查找打印机。我没有找到任何验证或连接到服务器的方法。
有关详细信息,我使用类javax.print.PrintServiceLookup来查找打印机,似乎没有方法允许我在服务器或类似的东西上进行身份验证。这是代码:
PrinterJob job = PrinterJob.getPrinterJob();
/* Create an array of PrintServices */
AttributeSet aset = new HashAttributeSet();
aset.add(new PrinterName(pObjImpresora, null));
aset.add(new RequestingUserName("user",null));
PrintService[] services = PrintServiceLookup.lookupPrintServices(null,aset);
if(services.length > 0){
aObjLog.info("IMPRESORA SELECCIONADA: "+pObjImpresora);
job.setPrintService(services[0]);
PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
printRequestAttributeSet.add(MediaSizeName.ISO_A4);
printRequestAttributeSet.add(new Copies(1));
JRPrintServiceExporter exporter;
exporter = new JRPrintServiceExporter();
exporter.setParameter(JRPrintServiceExporterParameter.JASPER_PRINT,pObjJasperPrint);
/* We set the selected service and pass it as a paramenter */
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE, services[0]);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET, services[0].getAttributes());
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET, printRequestAttributeSet);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG, Boolean.FALSE);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, Boolean.FALSE);
exporter.exportReport();
}
* pObjImpresora是一个具有打印机名称的String。我应该有办法到达服务器,然后打印机。我试过这个名字“\\ printserver \ MYPRINTER”,其中“printserver”是Windows主机名,而MYPRINTER是我的打印机;)
如果您对此有任何提示,请随时回答。提前谢谢。