[RESOLVIDO]Impressora Termica imprime caracteres

15 respostas
T

Estou utilizando uma impressora TERMICA Diebold procomp IM433TD mas quando vou imprimir uma string de caracteres atravez desse método

public static void testeMatric()
   {
        
        try 
        {
                    
            StringBuffer destino = new StringBuffer();
            
            destino.append("TESTE");       
            
            
            String caminhoMatric = "LPT1";   
           
            //Adiciona caminho da impressora
            FileOutputStream outputFile;            
            outputFile = new FileOutputStream(caminhoMatric);
            PrintWriter out = new PrintWriter(outputFile);                            
            
            out.println("aa");
            out.flush();                         
            try 
            {
                outputFile.close();
            } catch (IOException ex) 
            {
               
            }
                 out.close();   
        } catch (FileNotFoundException ex) 
        {
            
        }    
        
        
    
    }
ELA SEMPRE! imprime [color=brown](RREMOTE1STSM [/color] e depois imprime o que eu mando por exemplo:

com o método acima ela imprimiria:
[color=orange](RREMOTE1STSMTESTE [/color]

o que pode ser?
Obrigado a todos

15 Respostas

V

Opa blz, então eu não tenho o código aqui, mas qdo chegar em casa posto o codigo que utlizei aqui pra vc.

T

Muito Obrigado amigo
Você me salvou :stuck_out_tongue:

V
Bom primeiro uso um método que identifica as impressoras para que o usuario possa selecionar em um comboBox
public void detectarImpressoras() {

        try {
            boxImpressoras.removeAllItems();
            DocFlavor df = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
            ps = PrintServiceLookup.lookupPrintServices(df, null);
            for (PrintService p: ps) {
                boxImpressoras.addItem(p.getName());
            }

        } catch (Exception e) {

            e.printStackTrace();

        }
    }

em um outro método gero um string com o conteudo a ser impresso

private String gerarNotaTermica(){
        String nota = "";
        nota += "----------------------------------------"+System.getProperty ("line.separator");
        nota += "TOTAL R$152,69"
             +  "Loja 1"
             +  "Operador: OPERADOR"
             +  "EMPRESA"
             +  "----------------------------------------"+System.getProperty ("line.separator");

        return nota;
    }

E por fim, mando imprimir utilizando o método abaixo

private void imprimir(){
        for (int i=0; i<Integer.parseInt(jsCopias.getValue().toString()); i++){
            // Conteúdo a ser impresso
            InputStream stream = new ByteArrayInputStream((gerarNotaTermica() + "\u039A").getBytes());

            impressora = ps[boxImpressoras.getSelectedIndex()];
            DocPrintJob dpj = impressora.createPrintJob();

            // Definição de atributos do conteúdo a ser impresso:
            DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;

            // Cria um Doc para impressão a partir do arquivo exemplo.txt
            Doc documentoTexto = new SimpleDoc(stream, flavor, null);

            try {
                // 	Imprime o documento sem exibir uma tela de dialogo
                    dpj.print(documentoTexto, null);
            } catch (PrintException ex) {
                Logger.getLogger(dlgVenda.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
}
T
Vinny:
Bom primeiro uso um método que identifica as impressoras para que o usuario possa selecionar em um comboBox
public void detectarImpressoras() {

        try {
            boxImpressoras.removeAllItems();
            DocFlavor df = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
            ps = PrintServiceLookup.lookupPrintServices(df, null);
            for (PrintService p: ps) {
                boxImpressoras.addItem(p.getName());
            }

        } catch (Exception e) {

            e.printStackTrace();

        }
    }

em um outro método gero um string com o conteudo a ser impresso

private String gerarNotaTermica(){
        String nota = "";
        nota += "----------------------------------------"+System.getProperty ("line.separator");
        nota += "TOTAL R$152,69"
             +  "Loja 1"
             +  "Operador: OPERADOR"
             +  "EMPRESA"
             +  "----------------------------------------"+System.getProperty ("line.separator");

        return nota;
    }

E por fim, mando imprimir utilizando o método abaixo

private void imprimir(){
        for (int i=0; i<Integer.parseInt(jsCopias.getValue().toString()); i++){
            // Conteúdo a ser impresso
            InputStream stream = new ByteArrayInputStream((gerarNotaTermica() + "\u039A").getBytes());

            impressora = ps[boxImpressoras.getSelectedIndex()];
            DocPrintJob dpj = impressora.createPrintJob();

            // Definição de atributos do conteúdo a ser impresso:
            DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;

            // Cria um Doc para impressão a partir do arquivo exemplo.txt
            Doc documentoTexto = new SimpleDoc(stream, flavor, null);

            try {
                // 	Imprime o documento sem exibir uma tela de dialogo
                    dpj.print(documentoTexto, null);
            } catch (PrintException ex) {
                Logger.getLogger(dlgVenda.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
}

O problema é que não posso ter ela instalada, preciria enviar direto na porta LPT1

L

ola
mesmo sendo pela porta LPT1 ou COM1, voce deve instalar isso sendo no WINDOWS > Generic > Texto.
isso serve para o SO ententer o codigo ASCII vai usar determinadas DLL.

a instalação vc aponta para a porta desejada.
ja tive este problema no XP.

T

Lindberg:
ola
mesmo sendo pela porta LPT1 ou COM1, voce deve instalar isso sendo no WINDOWS > Generic > Texto.
isso serve para o SO ententer o codigo ASCII vai usar determinadas DLL.

a instalação vc aponta para a porta desejada.
ja tive este problema no XP.

Instalei generic text only e funcionou …!!!
Muito obrigado aos dois

L

é isso, vamos em frente …

M

Olá Vinny, se puder me tirar uma dúvida quanto a esse trecho?

Integer.parseInt(jsCopias.getValue().toString()

ele se refere a que?
obrigado!

V

MARKETRAW:
Olá Vinny, se puder me tirar uma dúvida quanto a esse trecho?

Integer.parseInt(jsCopias.getValue().toString()

ele se refere a que?
obrigado!

Nessa parte do código eu peguei o valor de um campo do meu Dialog que representa o números de cópias que eu quero imprimir e o converti em Integer.

Integer.parseInt() = Converter uma String em Integeiro;

jsCopias = É o nome do meu campo com o numero de copias;

getValue() = getValue pega o valor do meu campo que no caso era JSpinner, o getValue retorna um objeto;

toString() = Transforma o objeto retornado pelo getValue() em String;

M

Oopa, agoora intendí bacana!! :stuck_out_tongue:
Brigadão

J
Vinny:
Bom primeiro uso um método que identifica as impressoras para que o usuario possa selecionar em um comboBox
public void detectarImpressoras() {

        try {
            boxImpressoras.removeAllItems();
            DocFlavor df = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
            ps = PrintServiceLookup.lookupPrintServices(df, null);
            for (PrintService p: ps) {
                boxImpressoras.addItem(p.getName());
            }

        } catch (Exception e) {

            e.printStackTrace();

        }
    }

em um outro método gero um string com o conteudo a ser impresso

private String gerarNotaTermica(){
        String nota = "";
        nota += "----------------------------------------"+System.getProperty ("line.separator");
        nota += "TOTAL R$152,69"
             +  "Loja 1"
             +  "Operador: OPERADOR"
             +  "EMPRESA"
             +  "----------------------------------------"+System.getProperty ("line.separator");

        return nota;
    }

E por fim, mando imprimir utilizando o método abaixo

private void imprimir(){
        for (int i=0; i<Integer.parseInt(jsCopias.getValue().toString()); i++){
            // Conteúdo a ser impresso
            InputStream stream = new ByteArrayInputStream((gerarNotaTermica() + "\u039A").getBytes());

            impressora = ps[boxImpressoras.getSelectedIndex()];
            DocPrintJob dpj = impressora.createPrintJob();

            // Definição de atributos do conteúdo a ser impresso:
            DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;

            // Cria um Doc para impressão a partir do arquivo exemplo.txt
            Doc documentoTexto = new SimpleDoc(stream, flavor, null);

            try {
                // 	Imprime o documento sem exibir uma tela de dialogo
                    dpj.print(documentoTexto, null);
            } catch (PrintException ex) {
                Logger.getLogger(dlgVenda.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
}

Olá Vinny.
Teria como você me explicar mais ou menos referente ao método que identifica as impressoras com um ComboBox?
Teria como identificar a impressora automaticamente?
Obrigado

P

Pessoal to com uma impressora diebold IM433TD, igual do Tioola. Usei a classe dele e não deu certo. Nem imprimiu.

Bom depois tentei usar a classe do Vinny, mas não deu certo.

Oque pode ser? será q ue tá faltando algum jar ou configuração?

V

Cara para agente te ajudar você precisar dar mais detalhes do que esta acontecendo.

Esta dando alguma mensagem de erro? Se estiver posta aqui o erro.

Você esta conseguindo localizar a impressora? Mesmo sendo em outros programas como o Word.

Caso a impressora não esteja instalada no Sistema faça o que o nosso amigo Lindberg disse, isso pode funcionar para você assim como funcionou para o tioola.

Abraço

P

Consegui imprimir a classe executando pelo eclipse 3.1.
Tem alguma classe que eu consiga imprimir nesta impressora por uma servlet?

Fico no aguardo

P

Olá, desculpe re-abrir o tópico, tenho uma impressora térmica não-fiscal EngWorks conectada usando um adaptador USB-Paralelo que foi instalada com o driver Genérico/Somente Texto no Windows 7 x64 e a bichina não imprime de jeito maneiro.
Usei o código aqui apresentado em um aplicativo Swing JDK7 no Netbeans e roda sem erros porém o documento fica na fila de impressão e não sai de lá a não ser que eu limpe a fila ou desconecte o cabo que vai atrás da impressora.
A impressora foi testada na loja e funcionou perfeitamente.
Vocês poderiam me ajudar?
Obrigado

Criado 14 de outubro de 2011
Ultima resposta 17 de fev. de 2013
Respostas 15
Participantes 7