Impressão em Java com o CUPS: impressoras não encontradas

0

Estou tentando configurar um servidor Tomcat (8.5.5.0, Java 1.8.0_101) no Ubuntu (16.04) e imprimir em impressoras compartilhadas em um servidor de impressão do Windows.

Configurei com sucesso várias impressoras com o CUPS (2.1.3) e o SAMBA (4.3.11). Imprimir a partir da linha de comando funciona bem.

No meu aplicativo Java, quando tento procurar impressoras como esta:

PrintService[] ps = PrintServiceLookup.lookupPrintServices(null, null);

Isso me dá uma matriz vazia. Mas se eu definir uma impressora como padrão ("DefaultPrinter" em /etc/cups/printers.conf), a matriz contém apenas esta impressora.

Atualmente, só posso imprimir na impressora padrão, mas quero poder imprimir em qualquer impressora.

Obrigado pela sua ajuda.

    
por user630729 14.12.2016 / 08:52

1 resposta

1

Eu tive o mesmo problema e encontrei a solução. Eu não acho que essa é a melhor maneira de resolver o problema, mas pelo menos está funcionando para mim.

Primeiro encontrei o problema ao tentar configurar o serviço CUPS em um servidor Ubuntu 16.04 sem cabeçalho. Na minha área de trabalho Ubuntu 16.04, a impressora de pesquisa está funcionando mesmo sem configurar uma impressora padrão. Após investigações posteriores, descobri que o problema ocorreu depois que mudei a configuração do CUPS para permitir a administração remota.

Configuração original de cupsd.conf :

# Only listen for connections from the local machine
Listen localhost:631
Listen /var/run/cups.sock

Configuração modificada para permitir a administração remota (não funciona):

# Only listen for connections from the local machine
Listen *:631
Listen /var/run/cups.sock

Parece que o Java precisa se conectar ao serviço CUPS usando localhost, portanto, para permitir a administração remota e também fornecer conexão localhost para Java:

# Only listen for connections from the local machine
Listen localhost:631
Listen /var/run/cups.sock
Listen 192.168.0.100:631

Eu ainda não entendi porque usar Listen *:631 não pode fornecer conexão localhost para Java, então minha solução alternativa é adicionar configuração para ouvir o endereço IP do meu servidor.

Aqui está meu código Java que usei para consultar a impressora CUPS

public class TestPrinter {
    public static void main(String[] args) {
        PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
        System.out.println("Number of print services: " + printServices.length);

        System.out.println("Available printer: ");
        PrintService mPrintService = null;        
        for (PrintService printer : printServices) {
            System.out.println(printer.getName());
        }

        PrintService defaultPrinter = PrintServiceLookup.lookupDefaultPrintService();
        if (defaultPrinter != null) {
            System.out.println("Default printer: " + defaultPrinter.getName());        
        }
    }   
}
    
por hadyatmo 29.03.2017 / 04:58