View Javadoc

1   package net.sourceforge.barbecue.linear;
2   
3   import net.sourceforge.barbecue.Barcode;
4   import net.sourceforge.barbecue.BarcodeException;
5   import net.sourceforge.barbecue.Module;
6   import net.sourceforge.barbecue.output.LabelLayoutFactory;
7   import net.sourceforge.barbecue.output.Output;
8   import net.sourceforge.barbecue.output.OutputException;
9   
10  import java.awt.*;
11  
12  public abstract class LinearBarcode extends Barcode {
13  
14      protected LinearBarcode(String data) throws BarcodeException {
15          super(data);
16      }
17  
18      protected Dimension draw(Output output, int x, int y, int barWidth, int barHeight) throws OutputException {
19          int currentX = x;
20          Module preAmble = getPreAmble();
21          Module postAmble = getPostAmble();
22          output.beginDraw();
23  
24          if (preAmble != null) {
25              currentX += drawModule(getPreAmble(), output, currentX, y, barWidth, barHeight);
26          }
27  
28          Module[] modules = encodeData();
29          for (int i = 0; i < modules.length; i++) {
30              Module module = modules[i];
31              currentX += drawModule(module, output, currentX, y, barWidth, barHeight);
32          }
33  
34          currentX += drawModule(calculateChecksum(), output, currentX, y, barWidth, barHeight);
35  
36          if (postAmble != null) {
37              currentX += drawModule(postAmble, output, currentX, y, barWidth, barHeight);
38          }
39  
40          int currentY = this.barHeight + y;
41  
42          if (drawingText) {
43              currentY += drawTextLabel(output, x, currentY, currentX);
44          }
45  
46          Dimension size = new Dimension(currentX - x, currentY - y);
47          output.endDraw((int) size.getWidth(), (int) size.getHeight());
48          return size;
49      }
50  
51      protected int drawTextLabel(Output params, int x, int y, int width) throws OutputException {
52          return params.drawText(getLabel(), LabelLayoutFactory.createCenteredLayout(x, y, width));
53      }
54  }