BCGupca.barcode.php
5.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<?php
/**
*--------------------------------------------------------------------
*
* Sub-Class - UPC-A
*
* UPC-A contains
* - 2 system digits (1 not provided, a 0 is added automatically)
* - 5 manufacturer code digits
* - 5 product digits
* - 1 checksum digit
*
* The checksum is always displayed.
*
*--------------------------------------------------------------------
* Copyright (C) Jean-Sebastien Goupil
* http://www.barcodephp.com
*/
include_once('BCGParseException.php');
include_once('BCGean13.barcode.php');
class BCGupca extends BCGean13 {
protected $labelRight = null;
/**
* Constructor.
*/
public function __construct() {
parent::__construct();
}
/**
* Draws the barcode.
*
* @param resource $im
*/
public function draw($im) {
// The following code is exactly the same as EAN13. We just add a 0 in front of the code !
$this->text = '0' . $this->text; // We will remove it at the end... don't worry
parent::draw($im);
// We remove the 0 in front, as we said :)
$this->text = substr($this->text, 1);
}
/**
* Draws the extended bars on the image.
*
* @param resource $im
* @param int $plus
*/
protected function drawExtendedBars($im, $plus) {
$temp_text = $this->text . $this->keys[$this->checksumValue];
$rememberX = $this->positionX;
$rememberH = $this->thickness;
// We increase the bars
// First 2 Bars
$this->thickness = $this->thickness + intval($plus / $this->scale);
$this->positionX = 0;
$this->drawSingleBar($im, BCGBarcode::COLOR_FG);
$this->positionX += 2;
$this->drawSingleBar($im, BCGBarcode::COLOR_FG);
// Attemping to increase the 2 following bars
$this->positionX += 1;
$code1 = $this->positionX;
$temp_value = $this->findCode($temp_text[1]);
$this->drawChar($im, $temp_value, false);
// Center Guard Bar
$this->positionX += 36;
$this->drawSingleBar($im, BCGBarcode::COLOR_FG);
$this->positionX += 2;
$this->drawSingleBar($im, BCGBarcode::COLOR_FG);
// Attemping to increase the 2 last bars
$this->positionX += 37;
$temp_value = $this->findCode($temp_text[12]);
$this->drawChar($im, $temp_value, true);
// Completly last bars
$this->drawSingleBar($im, BCGBarcode::COLOR_FG);
$this->positionX += 2;
$this->drawSingleBar($im, BCGBarcode::COLOR_FG);
$this->positionX = $rememberX;
$this->thickness = $rememberH;
}
/**
* Adds the default label.
*/
protected function addDefaultLabel() {
if ($this->isDefaultEanLabelEnabled()) {
$this->processChecksum();
$label = $this->getLabel();
$font = $this->font;
$this->labelLeft = new BCGLabel(substr($label, 0, 1), $font, BCGLabel::POSITION_LEFT, BCGLabel::ALIGN_BOTTOM);
$this->labelLeft->setSpacing(4 * $this->scale);
$this->labelCenter1 = new BCGLabel(substr($label, 1, 5), $font, BCGLabel::POSITION_BOTTOM, BCGLabel::ALIGN_LEFT);
$labelCenter1Dimension = $this->labelCenter1->getDimension();
$this->labelCenter1->setOffset(($this->scale * 44 - $labelCenter1Dimension[0]) / 2 + $this->scale * 6);
$this->labelCenter2 = new BCGLabel(substr($label, 6, 5), $font, BCGLabel::POSITION_BOTTOM, BCGLabel::ALIGN_LEFT);
$labelCenter2Dimension = $this->labelCenter2->getDimension();
$this->labelCenter2->setOffset(($this->scale * 44 - $labelCenter1Dimension[0]) / 2 + $this->scale * 45);
$this->labelRight = new BCGLabel($this->keys[$this->checksumValue], $font, BCGLabel::POSITION_RIGHT, BCGLabel::ALIGN_BOTTOM);
$this->labelRight->setSpacing(4 * $this->scale);
if ($this->alignLabel) {
$labelDimension = $this->labelCenter1->getDimension();
$this->labelLeft->setOffset($labelDimension[1]);
$this->labelRight->setOffset($labelDimension[1]);
} else {
$labelDimension = $this->labelLeft->getDimension();
$this->labelLeft->setOffset($labelDimension[1] / 2);
$labelDimension = $this->labelLeft->getDimension();
$this->labelRight->setOffset($labelDimension[1] / 2);
}
$this->addLabel($this->labelLeft);
$this->addLabel($this->labelCenter1);
$this->addLabel($this->labelCenter2);
$this->addLabel($this->labelRight);
}
}
/**
* Check correct length.
*/
protected function checkCorrectLength() {
// If we have 12 chars, just flush the last one without throwing anything
$c = strlen($this->text);
if ($c === 12) {
$this->text = substr($this->text, 0, 11);
} elseif ($c !== 11) {
throw new BCGParseException('upca', 'Must contain 11 digits, the 12th digit is automatically added.');
}
}
}
?>