Impressão Java

24 respostas
R

Amigos preciso informações de como imprimir em java direto para a impressora…

Ja ouvi falar em java server print ou algo parecido… alguém sabe alguma coisa relativo a isso?

E tambem algo como imprintJob acho que se escreve assim…

Pois gostaria de fazer um exemplo bem basico tipo… um combo pra escolher as impressoras da maquina local e enviar strings direto para a impressora…

Agradeço muito se algum puder me ajudar…

Att. Roberto

24 Respostas

R

Eu utilizo a classe abaixo para listar as impressoras que tenho no computador, escolher uma delas (no caso a Generic Text Only porque é uma impressora fiscal Bematech) e imprimir o que eu quiser.

package br.com.ipuc.Impressao;

import javax.print.*;
import java.io.ByteArrayInputStream;
import java.io.InputStream;

// Essa classe é a responsavel pela impressao. Ela detecta a impressora
// instalada, recebe o texto e o imprime.
public class Impressao {

    // variavel estatica porque será utilizada por inumeras threads
    private static PrintService impressora;

    public Impressao() {

        detectaImpressoras();

    }

    // O metodo verifica se existe impressora conectada e a
    // define como padrao.
    public void detectaImpressoras() {

        try {

            DocFlavor df = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
            PrintService[] ps = PrintServiceLookup.lookupPrintServices(df, null);
            for (PrintService p: ps) {

                System.out.println("Impressora encontrada: " + p.getName());

                if (p.getName().contains("Text") || p.getName().contains("Generic"))  {

	                System.out.println("Impressora Selecionada: " + p.getName());
                    impressora = p;
                    break;

                }

            }

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    public synchronized boolean imprime(String texto) {

        // se nao existir impressora, entao avisa usuario
        // senao imprime texto
        if (impressora == null) {

            String msg = "Nennhuma impressora foi encontrada. Instale uma impressora padrão \r\n(Generic Text Only) e reinicie o programa.";
	       	System.out.println(msg);

        } else {

            try {

                DocPrintJob dpj = impressora.createPrintJob();
                InputStream stream = new ByteArrayInputStream(texto.getBytes());

                DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
                Doc doc = new SimpleDoc(stream, flavor, null);
                dpj.print(doc, null);

                return true;

            } catch (PrintException e) {

                e.printStackTrace();

            }

        }

        return false;

    }

}

Qualquer coisa meu MSN é [email removido]

tiagops

Pessoal, voces ja conseguiram imprimir documentos em impressoras matriciais? O que usaram?

Vou precisar imprimir notas fiscais apartir de uma aplicacao java web.

Minha duvida é se tem como dar comando de quebra de pagina, etc…

Valeu!

R

tiagops:
Pessoal, voces ja conseguiram imprimir documentos em impressoras matriciais? O que usaram?

Vou precisar imprimir notas fiscais apartir de uma aplicacao java web.

Minha duvida é se tem como dar comando de quebra de pagina, etc…

Valeu!

Eu só testei com impressora fiscal. Acho que o manual de intruçao da impressora deve dizer o caracter de quebra de linha. No meu caso a impressora fiscal aceita o \r\n como quebra.

motta_tb

eu uso “\u000B” pra quebrar a linha.

mas to com um problema q é o seguinte:
tenho um sistema web pra emitir nota fiscal em matricial
só consigo imprimir na impressora q o sistema ta rodando…

ou seja, no servidor :frowning:

quero acessar de algum micro da rede ou pela net e imprimir na impressora padrao q tem no micro.

alguem tem alguma ideia?

stefan

Ola, eu fiz um applet que le um arquivo XML aonde eu recebo todos os parametros de LinhaxColuna, fontes, negrito, italico e tudo mais…

Ele imprime em qualquer impressora que a maquina do usuario tenha acesso.

Ela trabalha em sextos e oitavos, bom, todo o suporte da matricial. Nao tive problemas de quebras de linhas, pq mando o texto na linha X e na coluna Y direto.

Abraços

H

Ola Pessoal.
Esse tema de imprimir em impressora matricial em java é complicado de achar na net eu já estou alguns meses procurando e não acho algo concreto.
Bom no meu caso eu consegui imprimir pelo iReport mas a qualidade não sai muito boa pois eu acho que ele imprime em modo grafico.
Alguem tem uma ideia que possa me ajudar a imprimir em matricial ou algum tutorial que explique,pois só falta isso para eu terminar um projeto.
Quem puder me ajudar muito Obrigado.
Valeu.

magnus

Como extender para poder especificar a linha e a coluna q se deseja imprimir?

Emerson_Bolsoni

Aê galera, to usando esse codigo postado pelo “rafaelsouzaf” porém tem um problema que ta acontecendo com minha impressora, ela esta mandando a impressão como manual e não pra bandeja automatica…
Ja configurei nas propriedades da impressora para que seja sempre enviado a bandeja e não está acontecendo isso…
Vocês sabem como faço pra setar isso no código???

Lich_King

vou tentar dar um chute aqui…me digam se está certo… :?

:arrow: eu crio um arquivo texto com modelo da nota para cada tipo d NF…
ele seria algo assim?

:arrow: a classe controladora de NF vai usar algum método de uma classe especifica para a matricial q está sendo usada (Epson, Citizen,…) e vai ler esse arquivo texto fazendo as substituições necessárias e jogar isso num String buffer…

:arrow: Depois a controladoraNF vai pegar cada linha desse StringBuffer mandar pra porta da matricial (q vai ser uma porta paralela, certo?)…

:arrow: Se imprimir no lugar errado da nota devo acertar meu modelo de NF até acertar isso…

seria mais ou menos isso?? :? :? :?: :?: há algo mais com q devo me preocupar??

V

stefan:
Nao tive problemas de quebras de linhas, pq mando o texto na linha X e na coluna Y direto.
Estou querendo fazer isso na aplicação web que trabalho, para imprimir notas fiscais.
Como você faz isso?
abraços

V

Eu comecei utilizando a Printig API.
Consegui imprimir linhas no ponto que eu quero, mas só consigo imprimir a partir do ponto imageableX / Y, não consigo imprimir da posição 00. Já setei a imageableArea, mas não funcionou.
Alguem sabe como resolver??
abraços

V

Talvez eu não tenha explicado direito, consigo imprimir onde eu quero na página.
Só qeu não consigo fazer a área útil de impressão começar do início da página.
Alguem sabe como posso fazer para começar a imprimir desde o início da página, retirando as margens?
Se alguem souber eu agradeço.
Abraços

V

Resolvi meu problema. Para colocar a margem lá em cima, na borda da página eu utilizei
graphics.setClip(…) e depois paper.setImageableArea(…), e pronto.
abraços

douglasrusso

Utilizo para quebra de linha: \r\n

A

vitormm:
Resolvi meu problema. Para colocar a margem lá em cima, na borda da página eu utilizei
graphics.setClip(…) e depois paper.setImageableArea(…), e pronto.
abraços

Vitor, vc poderia postar as linhas do seu graphics.setClip, paper.setImageableArea para facilitar o entendimento ?

Obrigado,

bezerra.renato

Olá a todos.

Estou interessado nesse recurso, mas não sei utiliza-lo.

Alguém teria um exemplo sobre este recurso?

Desde já agradeço.

nilsoncastro

Estou precisando saber como se faz para imprimir os dados de um formulário (que já está impresso) na posição certa de cada elemento
Alguem pode me ajudar?

nilsoncastro

stefan:
Ola, eu fiz um applet que le um arquivo XML aonde eu recebo todos os parametros de LinhaxColuna, fontes, negrito, italico e tudo mais…

Ele imprime em qualquer impressora que a maquina do usuario tenha acesso.

Ela trabalha em sextos e oitavos, bom, todo o suporte da matricial. Nao tive problemas de quebras de linhas, pq mando o texto na linha X e na coluna Y direto.

Abraços

Acho que preciso exatamente de uma função como essa, que imprima o texto posicionado nas coordenadas X e Y

P

Bom dia pessoal.

Eu estou tendo um problema com a minha impressão.

Gerei um arquivo.txt e quero imprimí-lo.
Pra enviar pra impressora tudo bem, porém, eu não estou conseguindo que seja impresso todo o conteúdo do arquivo, pois há linhas muito longas e na impressão não é quebrada a linha, fica faltando metade da linha a ser impressa.

Como eu faço pra que todo o meu arquivo seja impresso?
Segue meu codigo.

DocPrintJob dpj = impressora.createPrintJob();
InputStream stream = new ByteArrayInputStream(texto.getBytes());
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;

HashDocAttributeSet atributos = new HashDocAttributeSet();
atributos.add(new MediaPrintableArea(50,50,100,100,MediaPrintableArea.MM));

Doc doc = new SimpleDoc(stream, flavor, null);
dpj.print(doc, null);

Se vcs puderem me dar uma ajuda, fico agradecida.

Patrícia.

jopss

Pq voces nao fazem assim:

StringBuffer str = new StringBuffer();

str.append("cachorro!");
str.append("\n");
str.append("eh vc!!");

FileOutputStream outputFile = new FileOutputStream("LPT1:");
                    PrintWriter out = new PrintWriter(outputFile);
                    
                    out.print(str);
                    out.flush();
                    
                    outputFile.close();
                    out.close();

Mas to com um problema aqui… alguem sabe como fazem impressao pela rede??? Tipo, “LPT1” eh local neh… e pela rede???

Por acaso se for configurado uma impressora de rede no windows e eu mandar pra porta LPT1 normal como acima funfa???

ajuda ae…

jopss :stuck_out_tongue:

eduardoluiz.ribeiro

Olá galera, estou refazendo o código postado aí a acíma, e apareceram alguns problemas aqui, bom, eu ja debuguei o código e ví que a primeira parte (selecionar a impressora) está funcionando certinho, porém para ele funcionar eu substitui

if(p.getName().contains("Text")||p.getName().contains("Generic")){...

por

if(p.getName().contains("Text")||p.getName().contains("Brother PCL5e Driver")){...

que é o drive da impressora que eu quero testar
só que agora não está indo para o método imprime… ou seja ele seleciona a impressora mas n manda imprimir…? alguem sabe como resolver? ou eu n posso substituir o Generic ou o Text

augustocolom

rafaelsouzaf:
Eu utilizo a classe abaixo para listar as impressoras que tenho no computador, escolher uma delas (no caso a Generic Text Only porque é uma impressora fiscal Bematech) e imprimir o que eu quiser.

package br.com.ipuc.Impressao;

import javax.print.*;
import java.io.ByteArrayInputStream;
import java.io.InputStream;

// Essa classe é a responsavel pela impressao. Ela detecta a impressora
// instalada, recebe o texto e o imprime.
public class Impressao {

    // variavel estatica porque será utilizada por inumeras threads
    private static PrintService impressora;

    public Impressao() {

        detectaImpressoras();

    }

    // O metodo verifica se existe impressora conectada e a
    // define como padrao.
    public void detectaImpressoras() {

        try {

            DocFlavor df = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
            PrintService[] ps = PrintServiceLookup.lookupPrintServices(df, null);
            for (PrintService p: ps) {

                System.out.println("Impressora encontrada: " + p.getName());

                if (p.getName().contains("Text") || p.getName().contains("Generic"))  {

	                System.out.println("Impressora Selecionada: " + p.getName());
                    impressora = p;
                    break;

                }

            }

        } catch (Exception e) {

            e.printStackTrace();

        }
.....

Qualquer coisa meu MSN é [email removido]

Muito bom o exemplo… me ajudou muito!

Abraços

augustocolom

eduardoluiz.ribeiro:
Olá galera, estou refazendo o código postado aí a acíma, e apareceram alguns problemas aqui, bom, eu ja debuguei o código e ví que a primeira parte (selecionar a impressora) está funcionando certinho, porém para ele funcionar eu substitui

if(p.getName().contains("Text")||p.getName().contains("Generic")){...

por

if(p.getName().contains("Text")||p.getName().contains("Brother PCL5e Driver")){...

que é o drive da impressora que eu quero testar
só que agora não está indo para o método imprime… ou seja ele seleciona a impressora mas n manda imprimir…? alguem sabe como resolver? ou eu n posso substituir o Generic ou o Text

Cara…
é muito simples, na primeira vez que você rodas seu sistema, ele irá listar as impressoras disponíveis na máquina. Tu copia o nome e joga como parâmetro nesta linha…

if (p.getName().contains("Text") || p.getName().contains("PDFCreator"))
L

Olá pessoal, estou com problemas para imprimir diretamente na impressora matricial EPSON FX-2170.

Estou imprimindo os dados, só que preciso diminuir o espaçamento entre linhas via software,alguém sabé como fazer, já procurei em vários lugares mais não acho os comandos para isso

Obrigado!

Criado 5 de maio de 2006
Ultima resposta 2 de mar. de 2010
Respostas 24
Participantes 19