Impressão Java

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

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 é rsf@chatmania.com.br

2 curtidas

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!

[quote=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![/quote]

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.

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?

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

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.

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

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

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

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

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

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

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

Utilizo para quebra de linha: \r\n

[quote=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[/quote]

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

Obrigado,

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.

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?

[quote=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

[/quote]

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

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.