Java:从Linux中为Windows机器中的打印机进行打印机查找

时间:2012-07-30 09:59:58

标签: java windows linux lookup printers

我在尝试直接(没有任何对话框)在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是我的打印机;)

如果您对此有任何提示,请随时回答。提前谢谢。

0 个答案:

没有答案