Problemas para imprimir texto justificado usando PrinterJob

1 resposta
L

Senhores presciso de ajuda...

Tenho uma classe (DesenhaTermo.java) que estende de um JPanel e implementa uma Printable , onde tem a função de desenhar um texto recebido como argumento.

A classe que acessa esta primeira vem a ser uma destinada para impressão, a qual envia a string a ser imprimida para a classe DesenhaTermo.java pega o JPanel formado e envia para impressao através de um printjob.print();

O problema é que no formar o JPanel as linhas justificadas saem normais, isto é justificadas como eu queria, mas quando este JPanel é mandado para a impressão, a justificação cai fora, sendo que os paragrafos, centralizações, negritos continuam normalmente, ficando somente "desjustificado" .....

obs: para desenhar o texto justificado eu uso um objeto TextLayout e seu método getJustifiedLayout assim:

//pega o que está na string e adiciona a str
AttributedString str = new AttributedString(line);

//adiciona as propriedades na fonte do texto
 str.addAttribute (TextAttribute.FONT, new Font(FONTE, style,tamanho));


 LineBreakMeasurer quebrador =  new LineBreakMeasurer(str.getIterator(),  gr.getFontRenderContext());

//inicializa layout
TextLayout linha = quebrador.nextLayout(larguraImprimivel);

//justifica linha
linha = linha.getJustifiedLayout(larguraImprimivel);

//Desenha a linha no JPanel   
         while (linha != null) {
                
                posY += linha.getAscent();
               
                linha.draw(gr, posX, posY);
               
               
                posY += linha.getDescent() + linha.getLeading();
               

                linha = quebrador.nextLayout(larguraImprimivel);
               

            }

e para imprimir eu uso

try {
        
//job é um objeto  PrinterJob inicializado anteriormente assim como pageFormat que é um objeto PageFormat

         job.setPrintable (new DesenhaTermo(), pageFormat);
          
            
            if (job.printDialog()) {
           
            job.print();
                
                     }


        } catch (Exception pex) {
            System.err.println(" Erro ao imprimir  o termo " + pex);
        }
[/code]

1 Resposta

L

descobri… a razao por não imprimir está na linha que diz

LineBreakMeasurer quebrador =  new LineBreakMeasurer(str.getIterator(),  gr.getFontRenderContext());

não pode pegar o FontRenderContext retornado do objeto gráfico gr, tem que criar um novo objeto, aí entaum funciona… assim:

LineBreakMeasurer quebrador = new LineBreakMeasurer(str.getIterator(), new FontRenderContext(null,true,true)); [/code]

Criado 23 de maio de 2006
Ultima resposta 24 de mai. de 2006
Respostas 1
Participantes 1