Package

Source Code of AdvancedTextExample

import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.font.LineBreakMeasurer;
import java.awt.font.TextAttribute;
import java.awt.font.TextLayout;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.text.AttributedString;
import java.util.ArrayList;
import java.util.Iterator;


/**
* Exemplos de manipula��o avan�ada de textos para
* impress�o
*
* @author Herval Freire
*/
public class AdvancedTextExample implements Printable {
 
  // array de paragrafos do texto
  ArrayList texto;
 
  public AdvancedTextExample() throws IOException {
    // Obtem um job de impressao
    PrinterJob job = PrinterJob.getPrinterJob();
   
    // carrega o texto a ser impresso
    BufferedReader re = new BufferedReader(new FileReader("texto.txt"));
   
    texto = new ArrayList();
    String line = re.readLine();
    while (line != null) {
      texto.add(line);
      line = re.readLine();
    }   
    re.close();
   
   
    // Define o objeto a ser impresso
    job.setPrintable(this);
   
    // exibe o dialogo de impressao.
    if (job.printDialog()) {
      try {
        // imprime o objeto printable
        job.print();
      } catch (PrinterException e) {
        e.printStackTrace();
      }
    }   
  }
 
  public int print(Graphics g, PageFormat format, int page) throws PrinterException {
    if (page != 0) {
      return NO_SUCH_PAGE;
    }
    Graphics2D gr = (Graphics2D) g;

    // determina o ponto de inicio do texto (inicio da area util + 10 pontos)
    float posX = (float) format.getImageableX()+10;
    float posY = (float) format.getImageableY()+10;

    // determina a largura do texto como 350 pontos (dpi)
    float larguraTexto = 350;
   

    // para cada paragrafo, imprime o paragrafo formatado
    Iterator it = texto.iterator();
    while (it.hasNext()) {
      String line = (String) it.next();
   
      // caso haja uma linha em branco, substituir por um espa�o
      // para permitir formata��o
      if (line.length() == 0) {
        line = " ";
      }
     
      // texto formatado a ser impresso
      AttributedString str = new AttributedString(line);
   
      // define a fonte do texto como arial 12 it�lico
      str.addAttribute(TextAttribute.FONT, new Font("Arial", Font.ITALIC, 12));

      // instancia um line breaker para o texto formatado
      LineBreakMeasurer quebrador = new LineBreakMeasurer(str.getIterator(),
          gr.getFontRenderContext());   
   
      // cria um TextLayout para armazenar cada linha 'quebrada'
      TextLayout linha = quebrador.nextLayout(larguraTexto);
      while (linha != null) {

        // posiciona o texto
        posY += linha.getAscent();
       
        linha.draw(gr, posX, posY);
       
        // soma espa�o para a proxima linha
        posY += linha.getDescent() + linha.getLeading();
       
        linha = quebrador.nextLayout(larguraTexto);
      }
     
    } // fim dos paragrafos
   
    return PAGE_EXISTS;
  }

 
  public static void main(String[] args) {
    try {
      new AdvancedTextExample();
    } catch (IOException e) {
      System.out.println("Erro imprimindo: " + e.getMessage());
    }
  }
}
TOP

Related Classes of AdvancedTextExample

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.