2010-11-20 6 views
6

Da die brasilianische Regierung keine öffentliche API für Postleitzahlen hat, versuche ich den Code, den correios.com.br verwendet, um das Bild unten zu generieren, so dass ich meine eigenen Bilder generieren kann, um das OCR-Programm zu entwickeln .Java awt font spacing Optionen

alt text

Ich glaube, dass ich schon richtig fast alles bekommen haben neben dem Textabstand und den Farben:

alt text

Ich bin nicht daran interessiert, auf die Farben jetzt, aber der Text Abstand wirklich belästigt mich. Schauen Sie sich zum Beispiel das "Ti" in "Tijuca" an. Die beiden Buchstaben sind im Originalbild sehr nahe beieinander und ich kann diese Funktion nicht wiedergeben. Ich habe bereits versucht, die Schriftart abzuleiten, setze Werte auf TextAttribute.TRACKING und TextAttribute.KERNING, aber es hat nicht funktioniert.

folgt hier mein Code:

import java.awt.Color; 
import java.awt.font.TextAttribute; 
import java.awt.Font; 
import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import java.util.Hashtable; 
import javax.imageio.ImageIO; 

public class CreateImage { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     int width = 570; 
     int height = 120; 
     boolean new_image = true; 

     BufferedImage img;  

     if (!new_image) { 
      try { 
       img = ImageIO.read(new File("original.jpg"));       
      } catch (IOException e) { 
       e.printStackTrace();    
       new_image = true; 
       img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
      } 
     } else { 
      img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);   
     } 

     Graphics2D g2d = img.createGraphics(); 
     if (new_image) { 
      // white background 
      g2d.setPaint(Color.WHITE); 
      g2d.fillRect(0, 0, width, height); 

      g2d.setPaint(Color.BLACK); 
     } else { 
      g2d.setPaint(Color.RED); 
     } 


     Font myfont = new Font("SansSerif", Font.BOLD, 11);  

     /* 
     Hashtable<TextAttribute, Float> attributes = new Hashtable<TextAttribute, Float>(); 
     attributes.put(TextAttribute.TRACKING, new Float(-0.01)); 
     myfont = myfont.deriveFont(attributes); 
     */ 

     g2d.setFont(myfont); 

     g2d.drawString("Logradouro:", 5, 13); 
     g2d.drawString("Bairro:", 5, 33); 
     g2d.drawString("Localidade/UF:", 5, 53); 
     g2d.drawString("CEP:", 5, 73); 

     g2d.drawString("Avenida das Américas - de 3979 a 5151 - lado ímpar", 105, 13); 
     g2d.drawString("Barra da Tijuca", 105, 33); 
     g2d.drawString("Rio de Janeiro/RJ", 105, 53); 
     g2d.drawString("22631-004", 105, 73); 

     g2d.dispose();  

     File file = new File("clone.jpg"); 
     try { 
      ImageIO.write(img, "jpg", file); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     System.out.println("clone.jpg file created."); 
    } 

} 

Meine Frage ist: Was sind die anderen Optionen zu steuern, wie eine Schnur angeordnet ist, wenn er gezogen wird? Hast du irgendwelche Ideen, was der ursprüngliche Code tun könnte?

Danke!

Antwort

2

Ich kann nicht wirklich sagen, wie es richtig in Swing zu tun, aber was Sie suchen, ist in der Typografie namens "Kerning", so dass Attribut sollte etwas tun ähnlich.

+0

Siehe auch http://download.oracle.com/javase/6/docs/api/java/awt/font/TextAttribute.html – trashgod

+0

Hi Jolta. Vielen Dank für Ihren Vorschlag, aber, wie ich in der Frage gesagt habe, habe ich bereits sowohl Kerning und Tracking versucht, aber es hat nicht funktioniert. – jbochi