1
24 package net.sf.jasperreports.components.barbecue;
25
26 import java.awt.Dimension;
27 import java.awt.Graphics2D;
28 import java.awt.geom.AffineTransform;
29 import java.awt.geom.Dimension2D;
30 import java.awt.geom.Rectangle2D;
31
32 import net.sf.jasperreports.engine.JRRuntimeException;
33 import net.sf.jasperreports.engine.JasperReportsContext;
34 import net.sf.jasperreports.engine.type.RotationEnum;
35 import net.sf.jasperreports.renderers.AbstractRenderer;
36 import net.sf.jasperreports.renderers.DimensionRenderable;
37 import net.sf.jasperreports.renderers.Graphics2DRenderable;
38 import net.sourceforge.barbecue.Barcode;
39 import net.sourceforge.barbecue.output.OutputException;
40
41
42
46 public class BarbecueRendererImpl extends AbstractRenderer implements Graphics2DRenderable, DimensionRenderable
47 {
48
49 private static final long serialVersionUID = 1L;
50
51 private Barcode barcode;
52
53 private RotationEnum rotation;
54
55 public BarbecueRendererImpl(Barcode barcode)
56 {
57 this.barcode = barcode;
58 }
59
60 @Override
61 public Dimension2D getDimension(JasperReportsContext jasperReportsContext)
62 {
63 if (rotation != null)
64 {
65 switch(rotation)
66 {
67 case LEFT:
68 case RIGHT:
69 return new Dimension((int)barcode.getSize().getHeight(),(int)barcode.getSize().getWidth());
70 default:
71 return barcode.getSize();
72 }
73 } else
74 {
75 return barcode.getSize();
76 }
77 }
78
79 @Override
80 public void render(JasperReportsContext jasperReportsContext, Graphics2D grx, Rectangle2D rectangle)
81 {
82 AffineTransform origTransform = grx.getTransform();
83 try
84 {
85 Dimension size = barcode.getSize();
86
87 if (rotation != null)
88 {
89 switch (rotation)
90 {
91 case LEFT:
92 grx.translate(rectangle.getX(), rectangle.getY() + rectangle.getHeight());
93 grx.rotate((-1) * Math.PI / 2);
94 if (rectangle.getWidth() != size.getHeight()
95 || rectangle.getHeight() != size.getWidth())
96 {
97 grx.scale(rectangle.getHeight() / size.getWidth(),
98 rectangle.getWidth() / size.getHeight());
99
100 }
101 break;
102 case RIGHT:
103 grx.translate(rectangle.getX() + rectangle.getWidth(), rectangle.getY());
104 grx.rotate(Math.PI / 2);
105 if (rectangle.getWidth() != size.getHeight()
106 || rectangle.getHeight() != size.getWidth())
107 {
108 grx.scale(rectangle.getHeight() / size.getWidth(),
109 rectangle.getWidth() / size.getHeight());
110
111 }
112 break;
113 case UPSIDE_DOWN:
114 grx.translate(rectangle.getX() + rectangle.getWidth(), rectangle.getY() + rectangle.getHeight());
115 grx.rotate(Math.PI);
116 if (rectangle.getWidth() != size.getWidth()
117 || rectangle.getHeight() != size.getHeight())
118 {
119 grx.scale(rectangle.getWidth() / size.getWidth(),
120 rectangle.getHeight() / size.getHeight());
121 }
122 break;
123 case NONE:
124 grx.translate(rectangle.getX(), rectangle.getY());
125 if (rectangle.getWidth() != size.getWidth()
126 || rectangle.getHeight() != size.getHeight())
127 {
128 grx.scale(rectangle.getWidth() / size.getWidth(),
129 rectangle.getHeight() / size.getHeight());
130 }
131 break;
132 }
133 } else
134 {
135 grx.translate(rectangle.getX(), rectangle.getY());
136 if (rectangle.getWidth() != size.getWidth()
137 || rectangle.getHeight() != size.getHeight())
138 {
139 grx.scale(rectangle.getWidth() / size.getWidth(),
140 rectangle.getHeight() / size.getHeight());
141 }
142 }
143
144 barcode.draw(grx, 0, 0);
145 }
146 catch (OutputException e)
147 {
148 throw new JRRuntimeException(e);
149 }
150 finally
151 {
152 grx.setTransform(origTransform);
153 }
154 }
155
156 public void setRotation(RotationEnum rotation){
157 this.rotation = rotation;
158 }
159
160 }
161