Quebrando conteúdo de String usando java.awt.print

3 respostas
rafael.espiritosanto

Olá!
Estou utilizando o pacote java.awt.print para imprimir um relatório em uma impressora matricial.
O problema que estou enfrentado é que, caso uma string seja muito grande, não consigo fazer com que o conteúdo seja
enviado para a próxima linha. Sei que existem as classes PageFormat e Paper mas já fiz várias modificações e o conteúdo da
string não é quebrado.

Alguém sabe o que pode estar acontecendo?

A seguir um código de exemplo.

Abraço!

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;


public class HelloPrinter implements Printable {
	private int INICIO_X = 20;
	
	PrinterJob job = PrinterJob.getPrinterJob();
	
	@Override
	public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
			throws PrinterException {
		
		if (pageIndex > 0) { /* We have only one page, and 'page' is zero-based */
	         return NO_SUCH_PAGE;
	    }
		
		//pageFormat.setOrientation(PageFormat.PORTRAIT);
		Paper paper = new Paper();
		//paper.setSize(200, 200);
		paper.setImageableArea(0, 0, 200, 200);
		pageFormat.setPaper(paper);
		
	    /* User (0,0) is typically outside the imageable area, so we must
	     * translate by the X and Y values in the PageFormat to avoid clipping
	     */
	    Graphics2D g2d = (Graphics2D)graphics;
	    g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());

	    /*
	     * Data de emissão e número da nota
	     */
	    g2d.drawString("05/02/2009", 450, 70);
	    g2d.drawString("10111", 490, 105);
	    
	    /*
	     * Dados do Cliente
	     */
	    g2d.drawString("Rafael do Espirito Santo - [telefone removido]", INICIO_X, 95);
	    g2d.drawString("Rua Conde de Agrolongo, 9999", INICIO_X, 105);
	    g2d.drawString("Rio de Janeiro", INICIO_X, 115);
	    g2d.drawString("RJ", INICIO_X, 125);
	    g2d.drawString("21020-190", INICIO_X, 135);

	    /*
	     * Periodo, vencimento, projeto e valor
	     */
	    g2d.drawString("Jan-Jan/2009", INICIO_X, 170);
	    g2d.drawString("0 dias", INICIO_X + 100, 170);
	    g2d.drawString("PEP 10225", INICIO_X + 160, 170);
	    g2d.drawString("R$ 663,00", INICIO_X + 255, 170);
	    
	    /*
	     * Valor Extenso - TODO: Implementar for para pular linha caso ultrapasse o tamanho - Essa String não está quebrando!
	     */
	    g2d.drawString("seiscentos e sessenta e três reais askdjasdkljsadasjdksajdlkasjdlkasjdlkasjdlkasjdlkasjdlkasjdlkasjdklasjdlkasjdlkasdjXXXXXXXXXXXXX", INICIO_X + 105, 185);
	    
	    /*
	     * Condições especiais
	     */
	    g2d.drawString("Pagamento a ser efetuado no Branco do Brasil", INICIO_X, 220);
	    
	    
	    /*
	     * Descrição
	     */
	    //g2d.drawString("", x, y)
	    //g2d.drawString("", x, y)
	    
	    /*
	     * ISS, valor ISS e valor total
	     */
	    g2d.drawString("2,00", INICIO_X + 305, 400);
	    g2d.drawString("R$ 13,00", INICIO_X + 365, 400);
	    g2d.drawString("R$ 663,00", INICIO_X + 450, 400);
	    
	    
	    /* tell the caller that this page is part of the printed document */
	    return PAGE_EXISTS;
	}

}

3 Respostas

D

Jovem… nunca usei essa API, mas pelo que eu entendi, a cada “drawString” uma nova linha é gerada, certo?! Se for isso, pq você não tenta verificar o tamanho da String antes do draw e, caso seja maior que a quantidade de colunas que a impressora consegue imprimir, você gera dois draws ao invés de 1, criando assim duas linhas.

Espero ter ajudado. Até.

rafael.espiritosanto

Sim sim… já havia pensado nisso. A dúvida era se a própria API resolveria este problema.
Abraço!

G

[b]ENTAO ESTOU COM ESTE MESMO PROBLEMA

SE ALGUEM PUDER ME RESPONDER,

ESTOU IMPRIMINDO EM UMA IMPRESSORA TERMICA DE UM TÓTEM,
POREM QUANDO ACABA A paper.setImageableArea()

ELE SIMPLISMENTE CORTA A STRING E NÃO A IMPRIMI NA LINHA ABAIXO…
JA PASSA PARA A PROXIMA

Criado 5 de fevereiro de 2009
Ultima resposta 31 de jan. de 2013
Respostas 3
Participantes 3