1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Impressão muito grande no Jasperreports rodando no linux

Possuo um robo (um sofware de monitoramento) que envia NFe para diversas impressoras via rede. É feito em iReports (versão 5.1.0), esse robo até o começo do mês rodava em windows e não tinha problemas. Migramos para o linux, e aparentemente estava tudo normal, mas as impressões começaram a ficar lentas. Após investigar, descobri pelo cups, que os processos de impressão estão chegando a 4mb em cada nfe (sendo que quando gero um pdf e mando diretamente não chega a 30k). O engraçado é que fiz um programa que faz exatamente o que o meu robo faz, e ele envia a mesma nota usando uns 400k.

Suspeito que devido ao tamanho de cada job de impressão, o buffer da impressora não aguenta e demora a imprimir, causando a lentidão. Minhas suspeitas: 1-A fonte que utilizo (times new roman) não está instalada no linux, fazendo com que ele envie via postscript para a impressora instruções para desenhar letra por letra. http://community.jaspersoft.com/questions/537442/large-output-when-printing-postscript-linux

2-A impressão feita via linux não envia instruções simples como texto para a impressora, provavelmente ele renderiza uma imagem em alta resolução de cada página, e a impressora imprime como imagem, e não como texto.

A minha primeira suspeita quase foi descartada, fiz um programa que lista as fontes disponíveis no java, e a times está lá (fizemos o diabo pra instalar ela no linux, e deu certo), mesmo assim o tamanho dos jobs de impressão não diminuiram.

Se a minha segunda suspeita for verdadeira, e se o jasper não tiver nenhum jeito de resolver (mudando alguma opção via API) não sei o que fazer.

Alguém tem algum tipo de conhecimento que me ajude a resolver o problema?

Meu código de impressão:

        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 
        aset.add(new Copies(copies));//numero de copias  
        aset.add(new JobName(jobName, null));  

        JRPrintServiceExporter exporter = new JRPrintServiceExporter();
        exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
        exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE, printService);
        exporter.setParameter(JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET, aset);
        exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET, printService.getAttributes());
        exporter.setParameter(JRGraphics2DExporterParameter.MINIMIZE_PRINTER_JOB_SIZE, Boolean.TRUE);

        exporter.exportReport();

O fato do meu programa standalone criar um job 10x menor ainda é um mistério pra mim.

Só pra ficar documentado aqui, eu não achei uma solução decente para o problema, tive que fazer uma diferença entre windows/ linux, quando linux o meu sistema gera um pdf temporário e chama a impressão com o comando lpr, mudou o tamanho do job de 4mb pra 20k no máximo)

  • Por favor, escolha a melhor resposta e marque como certa para fechar a pergunta!

    utluiz   09 de jan de 2014
  • Vou marcar por marcar, pois não existe uma resposta que resolveu meu problema.

    Rafael Rossignol   09 de jan de 2014
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags java jasperreports linux pdf ou faça a sua própria pergunta.