BoundText.java 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. package commons.utility.spool;
  2. import java.awt.Color;
  3. import java.io.IOException;
  4. import commons.enumerate.AllineamentoCampoSpool_e;
  5. import commons.type.ModifyException;
  6. import commons.utility.field.tranf.PaddingModificator;
  7. import com.lowagie.text.DocumentException;
  8. import com.lowagie.text.pdf.BaseFont;
  9. import com.lowagie.text.pdf.PdfContentByte;
  10. public class BoundText implements IBound, IBoundWrite {
  11. /* nome attributi nel file XML */
  12. public final static String ATTR_X = "x";
  13. public final static String ATTR_Y = "y";
  14. public final static String ATTR_ALIGN = "a";
  15. public final static String ATTR_LEN = "l";
  16. public final static String ATTR_NAME = "nome";
  17. /* tipologia allineamento */
  18. public static final String CENTRATO = "c";
  19. public static final String SINISTRA = "s";
  20. public static final String DESTRA = "d";
  21. public final static char EMPTY_CHAR = ' ';
  22. private IPoint point;
  23. private IFont font;
  24. private int length;
  25. private AllineamentoCampoSpool_e alignment;
  26. private String name;
  27. private String valore;
  28. private float angle;
  29. private float charSpacing;
  30. private Color color;
  31. public Color getColor() {
  32. return color;
  33. }
  34. public void setColor(Color color) {
  35. this.color = color;
  36. }
  37. public BoundText(Point point,
  38. IFont font,
  39. int length,
  40. AllineamentoCampoSpool_e align,
  41. String name,
  42. String valore,
  43. float angle,
  44. float charSpacing,
  45. Color color) {
  46. setPoint(point);
  47. setFont(font);
  48. setLength(length);
  49. setAlignment(align);
  50. setName(name);
  51. setValue(valore);
  52. setCharSpacing(charSpacing);
  53. setAngle(angle);
  54. setColor(color);
  55. }
  56. public BoundText(Point point,
  57. IFont font,
  58. int length,
  59. AllineamentoCampoSpool_e align,
  60. String name,
  61. String valore) {
  62. this(point, font, length, align, name, valore, 0, 0, Color.BLACK);
  63. }
  64. public AllineamentoCampoSpool_e getAlignment() {
  65. return alignment;
  66. }
  67. public IPoint getPoint() {
  68. return point;
  69. }
  70. public int getLength() {
  71. return length;
  72. }
  73. public String getName() {
  74. return name;
  75. }
  76. public void setAlignment(AllineamentoCampoSpool_e spool_e) {
  77. alignment = spool_e;
  78. }
  79. public void setPoint(IPoint point) {
  80. this.point = point;
  81. }
  82. public void setFont(IFont font) {
  83. this.font = font;
  84. }
  85. public IFont getFont() {
  86. return font;
  87. }
  88. public void setLength(int i) {
  89. length = i;
  90. }
  91. public void setName(String string) {
  92. name = string;
  93. }
  94. public String getValue() {
  95. return valore;
  96. }
  97. public void setValue(String value) {
  98. valore = value;
  99. }
  100. public float getCharSpacing() {
  101. return charSpacing;
  102. }
  103. public void setCharSpacing(float charSpacing) {
  104. this.charSpacing = charSpacing;
  105. }
  106. public float getAngle() {
  107. return angle;
  108. }
  109. public void setAngle(float angle) {
  110. this.angle = angle;
  111. }
  112. public void write(PdfContentByte cb){
  113. String carat = formatText(this, getValue());
  114. BaseFont bf;
  115. try {
  116. if (font.getBaseFont() != null)
  117. {
  118. bf = font.getBaseFont();
  119. }
  120. else
  121. {
  122. bf = BaseFont.createFont(font.getFontName(), BaseFont.WINANSI, false);
  123. }
  124. cb.beginText();
  125. cb.setFontAndSize(bf, font.getFontHeight());
  126. cb.setCharacterSpacing(getCharSpacing());
  127. cb.setColorFill(color);
  128. cb.showTextAligned(PdfContentByte.ALIGN_LEFT,
  129. carat,
  130. point.getX(),
  131. point.getY(),
  132. angle);
  133. cb.endText();
  134. } catch (DocumentException e) {
  135. throw new RuntimeException( e );
  136. } catch (IOException e) {
  137. throw new RuntimeException( e );
  138. }
  139. }
  140. /**
  141. * Costruisce il testo da scrivere a seconda dell'allineamento
  142. * specificato
  143. * @param bound
  144. * @param value
  145. * @return
  146. */
  147. private String formatText(IBound bound, String value) {
  148. String ret = value;
  149. if ( bound.getAlignment()!= null
  150. &&
  151. !AllineamentoCampoSpool_e.NULLO.equals(bound.getAlignment()) ) {
  152. PaddingModificator pm = new PaddingModificator(PaddingModificator.Padding_e.LEFT,
  153. bound.getLength(),
  154. EMPTY_CHAR);
  155. switch (bound.getAlignment().getOrdinal()) {
  156. case AllineamentoCampoSpool_e.Values.CENTRATO:
  157. pm.setPadding(PaddingModificator.Padding_e.CENTER);
  158. break;
  159. case AllineamentoCampoSpool_e.Values.DESTRA:
  160. pm.setPadding(PaddingModificator.Padding_e.LEFT);
  161. break;
  162. case AllineamentoCampoSpool_e.Values.SINISTRA:
  163. pm.setPadding(PaddingModificator.Padding_e.RIGHT);
  164. break;
  165. }
  166. try {
  167. ret = pm.modify(value);
  168. } catch (ModifyException e) {
  169. ret = value;
  170. }
  171. }
  172. return ret;
  173. }
  174. /**
  175. * Traduce l'allineamento del file XML nel tipo
  176. * enumerato
  177. * @param align
  178. * @return
  179. */
  180. public static AllineamentoCampoSpool_e getAlign(String align){
  181. if (align.equalsIgnoreCase( CENTRATO ))
  182. return AllineamentoCampoSpool_e.CENTRATO;
  183. else if (align.equalsIgnoreCase( SINISTRA ))
  184. return AllineamentoCampoSpool_e.SINISTRA;
  185. else if (align.equalsIgnoreCase( DESTRA ))
  186. return AllineamentoCampoSpool_e.DESTRA;
  187. else
  188. return AllineamentoCampoSpool_e.NULLO;
  189. }
  190. public IAttributeList getAttributes() {
  191. return null;
  192. }
  193. }