Impressão em JAVA

Bom dia amigos, aqui na empresa meus aplicativos atualmente em VB6, utilizam dois tipos de impressão :
Laser/Jato (via crystal report) e Matricial(via LPT1)

Estou migrando para JAVA e gostaria de saber se algum de voces conhecem links,artigos,livros que tratam sobre este assunto pois utilizo muito isso aqui e não posso abrir mão desses dois tipos de impressão aqui.

Um forte abraço

Vimieiro

Vc pode usar o JasperRepost… já para matricial, nunca precisei fazer e não sei se há suporte… bem, deve existir, em Java existe um monstrinho pra tudo!

Valeu Rodrigo vou pesquisar sobre JasperReport.

Mas aqui mandamos correspondência para Muita Gente e sempre estou imprimindo Etiquetas em impressora Matricial (algo em torno de 5.000 etiquetas/mês) e preciso muito de impressão direto na LPT1.

Vimieiro

E pra modelar os relatórios você pode usar o iReport.

T+

Para impressôes bem acabadas, você deve usar o JasperReports,
até porque ele pode exportar os relatórios em PDF, EXCEL, RTF, etc…

Para a saída matricial, sugiro você gerar uma saída em arquivo ( no formato da impressora )
e enviar para o spooler de impressão.

Ou ainda numa solução desesperada, tentar comunicação via LPT usando alguma API nativa.

Bom trabalho.

"Para a saída matricial, sugiro você gerar uma saída em arquivo ( no formato da impressora )
e enviar para o spooler de impressão. "

Desculpe oziel mas sou iniciante e não entendi o que quis dizer.

Poderia ser mais claro ?

Um forte abraço

Vimieiro

[quote=vimieiro]Bom dia amigos, aqui na empresa meus aplicativos atualmente em VB6, utilizam dois tipos de impressão :
Laser/Jato (via crystal report) e Matricial(via LPT1)

Estou migrando para JAVA e gostaria de saber se algum de voces conhecem links,artigos,livros que tratam sobre este assunto pois utilizo muito isso aqui e não posso abrir mão desses dois tipos de impressão aqui.

Um forte abraço

Vimieiro

[/quote]

Olha uma classezinha prontinha q manda direto pra impressora matricial… :smiley:
Da uma estudada a adequa a suas necessidades!!

public class PrintComm {
    public static void sendTextToPrinter(String printerName, String jobName, String aText, String beginCommand, String endCommand) throws PrintException, InterruptedException {
        //Attribute Set storage
        PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();	 
        //We're looking for Text-capable printers
        DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
        //Return list of printers capable of printing Text
        PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);

        //Get the default printer
        PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
        //Display the print dialog with default printer selected
        pras.add(new JobName(jobName, null));
        pras.add(MediaTray.MAIN);

        PrintService service = null;
        if(printerName != null) {
            // Seleciona o serviço cujo nome foi passado pelo parametro printerName
            for(int i=0; i < printService.length; i++) {
                if(printService[i].getName().equalsIgnoreCase(printerName)) {
                    service = printService[i];
                    break;
                }
            }
        } else {
            // Se o nome da impressora não foi passado então abre a janela para o usuario escolher
            service = ServiceUI.printDialog(null, 50, 50, printService, defaultService, flavor, pras);
        }

        //If user selected "OK"...
        if (service != null) {
            //Create a print job
            DocPrintJob job = service.createPrintJob();
            Doc doc;
            //Create storage for attributes
            DocAttributeSet das = new HashDocAttributeSet();			
            //Create the print document from PDF file with default attributes
            doc = new SimpleDoc( newByteArrayInputStream(beginCommand+aText+endCommand), flavor, das);

            //Try some times...
            boolean ok = false;
            int trials = 0;
            while (!ok && trials < 10) {
                //Print the job
                try {
                    job.print(doc, pras);
                    ok = true;
                } catch (PrintException ex) {
                    ex.printStackTrace();
                }
                //Wait a few seconds for job to spool
                Thread.sleep(2000);
                trials++;
            }
        }
    }

    private static ByteArrayInputStream newByteArrayInputStream(String aText) {
        ByteArrayInputStream retorno = new ByteArrayInputStream(aText.getBytes());
        return retorno;  
    }

    private static InputStream newInputStream(String aText) {
        InputStream retorno =new ByteArrayInputStream(aText.getBytes());
        return retorno;
    }
}

Boa sorte!!

Valeu demais da conta andre2k2

andre2k2 muito boa esse exemplo. Salvaste meu dia…

Oi, estou com algumas duvidas em relaçao a esse codigo do andre2k2…

eu testei na minha HP DeskJet 695C e funciono mais ou menos, não pegou acentos, a impressora deu umas travadas e tive q clica no botao de puxa o papel pra ela começa imprimi… o motivo desses problemas é se o código serve apenas para impressora matricial?

gostaria de saber tambem a finalidade do campo jobName que não consegui entender… (sou novo em java)

Obrigado.

Felipe, o jobName é o nome que ira identificar a impressão… quando você abre aquela janelinha que tem a fila de impressao (No windows abre clicando no icone da impressora que aparece na tray). Um exemplo: quando você manda o Word imprimir ele cria um Job com o nome ‘Documento do Word’, isso identifica que aquela impressão na fila é do Word. É só mesmo para aparecer na janelinha bonitinho, bem formatado, se nao me engano voce pode até passar nulo pro parametro.
Quanto a seu problema com a impressora DeskJet não posso te ajudar muito. Quando estava desenvolvendo a impressão do sistema que utiliza essa classe q eu te enviei, precisei estudar alguns parametros que você passa junto da String que deseja imprimir. Por exemplo: se voce que imprimir na matricial “Olá Mundo!” para formatação passavasse alguns caracteres especiais com parametros por exemplo o tamanho da fonte… ficaria assim “F14Olá mundo!”. Como fiz a impressão apenas para matriciais Epson ficou muito facil, estudei a especificação da Epson e formatei perfeitamente. Sugiro a você procurar por essas especificações da HP, especificamente do modelo de impressora onde voce deseja usar o sistema.
Por outro lado, essa classe não é muito util para impressoras jato de tinta ou laser, pois suporte a esse tipo de impressora em java é riquíssimo. Se for usar apenas impressoras assim procure mais um pouco a respeito de impressão em java.

Obrigado andre… me ajudou bastate… =)

String beginCommand, String endCommand … nao entedi o q devo passar nesses dois parametro.

E esse método…

 private static InputStream newInputStream(String aText) {  
     InputStream retorno =new ByteArrayInputStream(aText.getBytes());  
     return retorno;  
 } 

Qual a função dele na classe??

Desculpa pessoal, sou novo em Java.

abraço.

Bom dia andre2k2,
Estou desenvolvendo uma forma de gerar etiquetas aqui na empresa porém será impresso em uma impressora matricial e estou com o problema citado nesse tópico, analisei a classe que vou postou, porém gostaria de saber como ela irá funcionar! Poderia me ajudar?

Clécio

Ele postou isso a 4 anos, acho meio difícil dele responder…

no entanto aqui tem um exemplo, não sei se irá lhe atender.