Impressão em Impressora do Tipo Texto

Boa tarde, pessoal.

Estou tentando imprimir em uma impressora que recebe comandos via texto. Para testes, estou usando um driver genérico de texto.

Já tentei vários códigos e nenhum parece funcionar.

O meu código atualmente está assim:

[code]PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(new Copies(1));
aset.add(new JobName(“Impressão”, null));

FileInputStream textStream;
textStream = new FileInputStream(“c:\imp.txt”);

DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
Doc mydoc = new SimpleDoc(textStream, flavor, null);

PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();

DocPrintJob job = defaultService.createPrintJob();
job.print(mydoc, aset);[/code]

Já tentei imprimir direto na porta de impressão, mas preciso que o usuário tenha a possibilidade de selecionar a impressora (no código, uso a Default apenas para facilitar os testes)

Alguma sugestão?

Obrigado

Tá tudo ai :wink:

 /**
     * Envia como array de bytes o @param toPrint para a impressora
     * desejada, através do nome.
     *
     * @param toPrint conteúdo a ser impresso ou comandos
     * @param printerName nome da impressora
     * @throws PrintException
     */
    public static void printArquivo(String toPrint, String printerName) throws PrintException {

        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
        aset.add(OrientationRequested.PORTRAIT);
        aset.add(new JobName("Impressão Etiqueta", null));

        //PROCURA A IMPRESSORA
        PrintService printer = null;

        PrintService[] impressoras = PrinterJob.lookupPrintServices();


        for (int i = 0; i < impressoras.length; i++) {
            PrintService p = impressoras[i];

            if (p.getName().equalsIgnoreCase(printerName)) {
                JOptionPane.showMessageDialog(null, "Impressora pronta para imprimir..");
                printer = p;
                break;

            }
        }

        //ENVIA COMO ARRAY DE BYTES PARA IMPRESSORA DESEJADA
        DocPrintJob docPrint = printer.createPrintJob();
        InputStream stream = new ByteArrayInputStream(toPrint.getBytes());
        DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
        Doc doc = new SimpleDoc(stream, flavor, null);
        docPrint.print(doc, aset);
    }

    /**
     * Busca todas as impressoras instaladas no computador,
     * inclusive impressoras de rede.
     *
     * @return uma lista de Strings com os nomes das impressoras
     */
    public static List getListaDeImpressoras() {
        List list = new ArrayList();

        if (PrinterJob.lookupPrintServices() != null) {
            PrintService[] impressoras = PrinterJob.lookupPrintServices();

            for (int i = 0; i < impressoras.length; i++) {
                PrintService p = impressoras[i];

                list.add(p.getName());
            }
        }
        return list;
    }
}

Vou testar e já retorno.

Obrigado

Infelizmente não funcionou. :frowning:

Não fiz nenhum alteração no código, apenas adicionei um main na classe:

public static void main(String[] args) throws Exception { printArquivo("Texto a ser impresso", "Texto"); }

Estou testando em uma impressora mapeada para um arquivo, usando driver Genérico de Texto (o que deveria gerar o arquivo com a String enviada para impressão).

Estou na luta ainda… 8)

Quando fiz isso usei o javacomm…
depois de aberto a porta serial correta da impressora, bastou escrever os bytes que queria.

dyorgio,

Com JavaComm eu consigo obter uma lista de todas impressoras instaladas na máquina do usuário (incluindo impressoras compartilhadas)?
Se sim, isso ajudaria a resolver meu problema.

Já consegui imprimir diretamente na porta da impressora como citado aqui, o problema é que preciso dar opção ao usuário de escolher a impressora desejada

Cara,

Seguinte, aquele método ali, lista impressoras… pega todas as impressoras disponiveis inclusive as em rede.

Para imprimir na LPT1, USB ou qualquer uma é só você passar o nome correto da impressora! Texto é nome da impressora que está instalada no seu painel de controle?

Utilizo isso para imprimir em impressoras de termo-transferencia que tem uma linguagem especifica… funciona em um applet em mais de 50 clientes… reconhecendo todas as impressoras e fazendo a impressao!

abraço

não cara, o javacom apenas lista as portas seriais.

[quote=pavei]Cara,

Seguinte, aquele método ali, lista impressoras… pega todas as impressoras disponiveis inclusive as em rede.

Para imprimir na LPT1, USB ou qualquer uma é só você passar o nome correto da impressora! Texto é nome da impressora que está instalada no seu painel de controle?

Utilizo isso para imprimir em impressoras de termo-transferencia que tem uma linguagem especifica… funciona em um applet em mais de 50 clientes… reconhecendo todas as impressoras e fazendo a impressao!

abraço[/quote]

pavei,
Texto é sim o nome da impressora que está instalada no meu Windows. Como disse anteriormente, estou usando uma impressora em arquivo, com driver genérico/somente texto. Fiz um teste em Windows XP (Java 5) e Windows 7 (Java 6). Ambos falharam.

Até tentei deixar como impressora padrão e ao invés de procurar as impressoras disponíveis utilizar a padrão. Em ambos os casos o PrinterJob usa a impressora correta mas no Windows XP o arquivo sai vazio e no no Windows 7 é acusado um erro no gerenciador de fila de impressão.

Vou tentar fazer mais alguns testes.

Foi o que eu imaginei. Mas mesmo assim, valeu pela ajuda