Impressão em Impressora do Tipo Texto

8 respostas
M

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:
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);

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

8 Respostas

P

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;
    }
}
M

Vou testar e já retorno.

Obrigado

M

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)

D

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

M

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

P

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

D

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

M

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

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

Criado 2 de março de 2010
Ultima resposta 3 de mar. de 2010
Respostas 8
Participantes 3