2

我在尝试直接(没有任何对话框)在 Java Web 应用程序(在 Websphere Application Server 6.1 上)和 Java 程序(两者共享一些包含此打印代码的代码)上与打印机打印 PDF 时遇到问题。打印机位于 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 = 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();
    }

pObjImpresoraString具有打印机名称的。我应该有办法到达服务器,然后是上面的打印机。我试过这个名字"\\\\printserver\\MYPRINTER"printserverWindows 主机名在哪里,MYPRINTER是我的打印机;)

4

0 回答 0