package commons.utility.spool; import java.awt.Color; import java.io.IOException; import commons.enumerate.AllineamentoCampoSpool_e; import commons.type.ModifyException; import commons.utility.field.tranf.PaddingModificator; import com.lowagie.text.DocumentException; import com.lowagie.text.pdf.BaseFont; import com.lowagie.text.pdf.PdfContentByte; public class BoundText implements IBound, IBoundWrite { /* nome attributi nel file XML */ public final static String ATTR_X = "x"; public final static String ATTR_Y = "y"; public final static String ATTR_ALIGN = "a"; public final static String ATTR_LEN = "l"; public final static String ATTR_NAME = "nome"; /* tipologia allineamento */ public static final String CENTRATO = "c"; public static final String SINISTRA = "s"; public static final String DESTRA = "d"; public final static char EMPTY_CHAR = ' '; private IPoint point; private IFont font; private int length; private AllineamentoCampoSpool_e alignment; private String name; private String valore; private float angle; private float charSpacing; private Color color; public Color getColor() { return color; } public void setColor(Color color) { this.color = color; } public BoundText(Point point, IFont font, int length, AllineamentoCampoSpool_e align, String name, String valore, float angle, float charSpacing, Color color) { setPoint(point); setFont(font); setLength(length); setAlignment(align); setName(name); setValue(valore); setCharSpacing(charSpacing); setAngle(angle); setColor(color); } public BoundText(Point point, IFont font, int length, AllineamentoCampoSpool_e align, String name, String valore) { this(point, font, length, align, name, valore, 0, 0, Color.BLACK); } public AllineamentoCampoSpool_e getAlignment() { return alignment; } public IPoint getPoint() { return point; } public int getLength() { return length; } public String getName() { return name; } public void setAlignment(AllineamentoCampoSpool_e spool_e) { alignment = spool_e; } public void setPoint(IPoint point) { this.point = point; } public void setFont(IFont font) { this.font = font; } public IFont getFont() { return font; } public void setLength(int i) { length = i; } public void setName(String string) { name = string; } public String getValue() { return valore; } public void setValue(String value) { valore = value; } public float getCharSpacing() { return charSpacing; } public void setCharSpacing(float charSpacing) { this.charSpacing = charSpacing; } public float getAngle() { return angle; } public void setAngle(float angle) { this.angle = angle; } public void write(PdfContentByte cb){ String carat = formatText(this, getValue()); BaseFont bf; try { if (font.getBaseFont() != null) { bf = font.getBaseFont(); } else { bf = BaseFont.createFont(font.getFontName(), BaseFont.WINANSI, false); } cb.beginText(); cb.setFontAndSize(bf, font.getFontHeight()); cb.setCharacterSpacing(getCharSpacing()); cb.setColorFill(color); cb.showTextAligned(PdfContentByte.ALIGN_LEFT, carat, point.getX(), point.getY(), angle); cb.endText(); } catch (DocumentException e) { throw new RuntimeException( e ); } catch (IOException e) { throw new RuntimeException( e ); } } /** * Costruisce il testo da scrivere a seconda dell'allineamento * specificato * @param bound * @param value * @return */ private String formatText(IBound bound, String value) { String ret = value; if ( bound.getAlignment()!= null && !AllineamentoCampoSpool_e.NULLO.equals(bound.getAlignment()) ) { PaddingModificator pm = new PaddingModificator(PaddingModificator.Padding_e.LEFT, bound.getLength(), EMPTY_CHAR); switch (bound.getAlignment().getOrdinal()) { case AllineamentoCampoSpool_e.Values.CENTRATO: pm.setPadding(PaddingModificator.Padding_e.CENTER); break; case AllineamentoCampoSpool_e.Values.DESTRA: pm.setPadding(PaddingModificator.Padding_e.LEFT); break; case AllineamentoCampoSpool_e.Values.SINISTRA: pm.setPadding(PaddingModificator.Padding_e.RIGHT); break; } try { ret = pm.modify(value); } catch (ModifyException e) { ret = value; } } return ret; } /** * Traduce l'allineamento del file XML nel tipo * enumerato * @param align * @return */ public static AllineamentoCampoSpool_e getAlign(String align){ if (align.equalsIgnoreCase( CENTRATO )) return AllineamentoCampoSpool_e.CENTRATO; else if (align.equalsIgnoreCase( SINISTRA )) return AllineamentoCampoSpool_e.SINISTRA; else if (align.equalsIgnoreCase( DESTRA )) return AllineamentoCampoSpool_e.DESTRA; else return AllineamentoCampoSpool_e.NULLO; } public IAttributeList getAttributes() { return null; } }