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]

T

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.

M

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?

S

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.

M

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

E

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???

L

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

D

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,

B

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.

N

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?

N

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.

J

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:

E

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

A

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

A

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