2

Java Web アプリケーション (Websphere Application Server 6.1 上) と Java プログラム (どちらもこの印刷コードを含むコードを共有しています) で PDF をプリンターで直接(ダイアログなしで) 印刷しようとすると問題が発生します。プリンターは Windows ホスト上にあり、Web アプリケーションと非 Web アプリケーションは Linux で実行されます。

印刷システム (Windows) に存在しないか、許可を持っていない Linux のユーザーで印刷しようとするため、許可の問題である可能性があることを読みました。

サーバーと Java アプリケーションはユーザー root で実行されているため、クライアントから印刷サーバーの権限を持つユーザーは別のユーザーであると言われたので (権限の問題である場合)、ここで立ち往生しています。そのサーバーで印刷が許可されているユーザー名を知っています。

Linux の root ユーザーと Windows のユーザー (印刷権限を持つユーザー) を Samba 経由で関連付けることができれば可能だと思います。しかし、私はそれを行うことができませんでした (私は 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"私はこの名前を試しましprintserverMYPRINTER.

4

0 に答える 0