PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.2.1
GiveWP – Donation Plugin and Fundraising Platform v2.2.1
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / includes / libraries / tcpdf / tcpdf_barcodes_2d.php
give / includes / libraries / tcpdf Last commit date
config 8 years ago fonts 8 years ago include 7 years ago tools 7 years ago CHANGELOG.TXT 7 years ago LICENSE.TXT 8 years ago README.md 7 years ago composer.json 7 years ago tcpdf.php 7 years ago tcpdf_autoconfig.php 8 years ago tcpdf_barcodes_1d.php 8 years ago tcpdf_barcodes_2d.php 8 years ago tcpdf_import.php 8 years ago tcpdf_parser.php 8 years ago
tcpdf_barcodes_2d.php
350 lines
1 <?php
2 //============================================================+
3 // File name : tcpdf_barcodes_2d.php
4 // Version : 1.0.015
5 // Begin : 2009-04-07
6 // Last Update : 2014-05-20
7 // Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com
8 // License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html)
9 // -------------------------------------------------------------------
10 // Copyright (C) 2009-2014 Nicola Asuni - Tecnick.com LTD
11 //
12 // This file is part of TCPDF software library.
13 //
14 // TCPDF is free software: you can redistribute it and/or modify it
15 // under the terms of the GNU Lesser General Public License as
16 // published by the Free Software Foundation, either version 3 of the
17 // License, or (at your option) any later version.
18 //
19 // TCPDF is distributed in the hope that it will be useful, but
20 // WITHOUT ANY WARRANTY; without even the implied warranty of
21 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
22 // See the GNU Lesser General Public License for more details.
23 //
24 // You should have received a copy of the GNU Lesser General Public License
25 // along with TCPDF. If not, see <http://www.gnu.org/licenses/>.
26 //
27 // See LICENSE.TXT file for more information.
28 // -------------------------------------------------------------------
29 //
30 // Description : PHP class to creates array representations for
31 // 2D barcodes to be used with TCPDF.
32 //
33 //============================================================+
34
35 /**
36 * @file
37 * PHP class to creates array representations for 2D barcodes to be used with TCPDF.
38 * @package com.tecnick.tcpdf
39 * @author Nicola Asuni
40 * @version 1.0.015
41 */
42
43 /**
44 * @class TCPDF2DBarcode
45 * PHP class to creates array representations for 2D barcodes to be used with TCPDF (http://www.tcpdf.org).
46 * @package com.tecnick.tcpdf
47 * @version 1.0.015
48 * @author Nicola Asuni
49 */
50 class TCPDF2DBarcode {
51
52 /**
53 * Array representation of barcode.
54 * @protected
55 */
56 protected $barcode_array = false;
57
58 /**
59 * This is the class constructor.
60 * Return an array representations for 2D barcodes:<ul>
61 * <li>$arrcode['code'] code to be printed on text label</li>
62 * <li>$arrcode['num_rows'] required number of rows</li>
63 * <li>$arrcode['num_cols'] required number of columns</li>
64 * <li>$arrcode['bcode'][$r][$c] value of the cell is $r row and $c column (0 = transparent, 1 = black)</li></ul>
65 * @param $code (string) code to print
66 * @param $type (string) type of barcode: <ul><li>DATAMATRIX : Datamatrix (ISO/IEC 16022)</li><li>PDF417 : PDF417 (ISO/IEC 15438:2006)</li><li>PDF417,a,e,t,s,f,o0,o1,o2,o3,o4,o5,o6 : PDF417 with parameters: a = aspect ratio (width/height); e = error correction level (0-8); t = total number of macro segments; s = macro segment index (0-99998); f = file ID; o0 = File Name (text); o1 = Segment Count (numeric); o2 = Time Stamp (numeric); o3 = Sender (text); o4 = Addressee (text); o5 = File Size (numeric); o6 = Checksum (numeric). NOTES: Parameters t, s and f are required for a Macro Control Block, all other parametrs are optional. To use a comma character ',' on text options, replace it with the character 255: "\xff".</li><li>QRCODE : QRcode Low error correction</li><li>QRCODE,L : QRcode Low error correction</li><li>QRCODE,M : QRcode Medium error correction</li><li>QRCODE,Q : QRcode Better error correction</li><li>QRCODE,H : QR-CODE Best error correction</li><li>RAW: raw mode - comma-separad list of array rows</li><li>RAW2: raw mode - array rows are surrounded by square parenthesis.</li><li>TEST : Test matrix</li></ul>
67 */
68 public function __construct($code, $type) {
69 $this->setBarcode($code, $type);
70 }
71
72 /**
73 * Return an array representations of barcode.
74 * @return array
75 */
76 public function getBarcodeArray() {
77 return $this->barcode_array;
78 }
79
80 /**
81 * Send barcode as SVG image object to the standard output.
82 * @param $w (int) Width of a single rectangle element in user units.
83 * @param $h (int) Height of a single rectangle element in user units.
84 * @param $color (string) Foreground color (in SVG format) for bar elements (background is transparent).
85 * @public
86 */
87 public function getBarcodeSVG($w=3, $h=3, $color='black') {
88 // send headers
89 $code = $this->getBarcodeSVGcode($w, $h, $color);
90 header('Content-Type: application/svg+xml');
91 header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
92 header('Pragma: public');
93 header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
94 header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
95 header('Content-Disposition: inline; filename="'.md5($code).'.svg";');
96 //header('Content-Length: '.strlen($code));
97 echo $code;
98 }
99
100 /**
101 * Return a SVG string representation of barcode.
102 * @param $w (int) Width of a single rectangle element in user units.
103 * @param $h (int) Height of a single rectangle element in user units.
104 * @param $color (string) Foreground color (in SVG format) for bar elements (background is transparent).
105 * @return string SVG code.
106 * @public
107 */
108 public function getBarcodeSVGcode($w=3, $h=3, $color='black') {
109 // replace table for special characters
110 $repstr = array("\0" => '', '&' => '&amp;', '<' => '&lt;', '>' => '&gt;');
111 $svg = '<'.'?'.'xml version="1.0" standalone="no"'.'?'.'>'."\n";
112 $svg .= '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">'."\n";
113 $svg .= '<svg width="'.round(($this->barcode_array['num_cols'] * $w), 3).'" height="'.round(($this->barcode_array['num_rows'] * $h), 3).'" version="1.1" xmlns="http://www.w3.org/2000/svg">'."\n";
114 $svg .= "\t".'<desc>'.strtr($this->barcode_array['code'], $repstr).'</desc>'."\n";
115 $svg .= "\t".'<g id="elements" fill="'.$color.'" stroke="none">'."\n";
116 // print barcode elements
117 $y = 0;
118 // for each row
119 for ($r = 0; $r < $this->barcode_array['num_rows']; ++$r) {
120 $x = 0;
121 // for each column
122 for ($c = 0; $c < $this->barcode_array['num_cols']; ++$c) {
123 if ($this->barcode_array['bcode'][$r][$c] == 1) {
124 // draw a single barcode cell
125 $svg .= "\t\t".'<rect x="'.$x.'" y="'.$y.'" width="'.$w.'" height="'.$h.'" />'."\n";
126 }
127 $x += $w;
128 }
129 $y += $h;
130 }
131 $svg .= "\t".'</g>'."\n";
132 $svg .= '</svg>'."\n";
133 return $svg;
134 }
135
136 /**
137 * Return an HTML representation of barcode.
138 * @param $w (int) Width of a single rectangle element in pixels.
139 * @param $h (int) Height of a single rectangle element in pixels.
140 * @param $color (string) Foreground color for bar elements (background is transparent).
141 * @return string HTML code.
142 * @public
143 */
144 public function getBarcodeHTML($w=10, $h=10, $color='black') {
145 $html = '<div style="font-size:0;position:relative;width:'.($w * $this->barcode_array['num_cols']).'px;height:'.($h * $this->barcode_array['num_rows']).'px;">'."\n";
146 // print barcode elements
147 $y = 0;
148 // for each row
149 for ($r = 0; $r < $this->barcode_array['num_rows']; ++$r) {
150 $x = 0;
151 // for each column
152 for ($c = 0; $c < $this->barcode_array['num_cols']; ++$c) {
153 if ($this->barcode_array['bcode'][$r][$c] == 1) {
154 // draw a single barcode cell
155 $html .= '<div style="background-color:'.$color.';width:'.$w.'px;height:'.$h.'px;position:absolute;left:'.$x.'px;top:'.$y.'px;">&nbsp;</div>'."\n";
156 }
157 $x += $w;
158 }
159 $y += $h;
160 }
161 $html .= '</div>'."\n";
162 return $html;
163 }
164
165 /**
166 * Send a PNG image representation of barcode (requires GD or Imagick library).
167 * @param $w (int) Width of a single rectangle element in pixels.
168 * @param $h (int) Height of a single rectangle element in pixels.
169 * @param $color (array) RGB (0-255) foreground color for bar elements (background is transparent).
170 * @public
171 */
172 public function getBarcodePNG($w=3, $h=3, $color=array(0,0,0)) {
173 $data = $this->getBarcodePngData($w, $h, $color);
174 // send headers
175 header('Content-Type: image/png');
176 header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
177 header('Pragma: public');
178 header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
179 header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
180 //header('Content-Length: '.strlen($data));
181 echo $data;
182
183 }
184
185 /**
186 * Return a PNG image representation of barcode (requires GD or Imagick library).
187 * @param $w (int) Width of a single rectangle element in pixels.
188 * @param $h (int) Height of a single rectangle element in pixels.
189 * @param $color (array) RGB (0-255) foreground color for bar elements (background is transparent).
190 * @return image or false in case of error.
191 * @public
192 */
193 public function getBarcodePngData($w=3, $h=3, $color=array(0,0,0)) {
194 // calculate image size
195 $width = ($this->barcode_array['num_cols'] * $w);
196 $height = ($this->barcode_array['num_rows'] * $h);
197 if (function_exists('imagecreate')) {
198 // GD library
199 $imagick = false;
200 $png = imagecreate($width, $height);
201 $bgcol = imagecolorallocate($png, 255, 255, 255);
202 imagecolortransparent($png, $bgcol);
203 $fgcol = imagecolorallocate($png, $color[0], $color[1], $color[2]);
204 } elseif (extension_loaded('imagick')) {
205 $imagick = true;
206 $bgcol = new imagickpixel('rgb(255,255,255');
207 $fgcol = new imagickpixel('rgb('.$color[0].','.$color[1].','.$color[2].')');
208 $png = new Imagick();
209 $png->newImage($width, $height, 'none', 'png');
210 $bar = new imagickdraw();
211 $bar->setfillcolor($fgcol);
212 } else {
213 return false;
214 }
215 // print barcode elements
216 $y = 0;
217 // for each row
218 for ($r = 0; $r < $this->barcode_array['num_rows']; ++$r) {
219 $x = 0;
220 // for each column
221 for ($c = 0; $c < $this->barcode_array['num_cols']; ++$c) {
222 if ($this->barcode_array['bcode'][$r][$c] == 1) {
223 // draw a single barcode cell
224 if ($imagick) {
225 $bar->rectangle($x, $y, ($x + $w - 1), ($y + $h - 1));
226 } else {
227 imagefilledrectangle($png, $x, $y, ($x + $w - 1), ($y + $h - 1), $fgcol);
228 }
229 }
230 $x += $w;
231 }
232 $y += $h;
233 }
234 if ($imagick) {
235 $png->drawimage($bar);
236 return $png;
237 } else {
238 ob_start();
239 imagepng($png);
240 $imagedata = ob_get_clean();
241 imagedestroy($png);
242 return $imagedata;
243 }
244 }
245
246 /**
247 * Set the barcode.
248 * @param $code (string) code to print
249 * @param $type (string) type of barcode: <ul><li>DATAMATRIX : Datamatrix (ISO/IEC 16022)</li><li>PDF417 : PDF417 (ISO/IEC 15438:2006)</li><li>PDF417,a,e,t,s,f,o0,o1,o2,o3,o4,o5,o6 : PDF417 with parameters: a = aspect ratio (width/height); e = error correction level (0-8); t = total number of macro segments; s = macro segment index (0-99998); f = file ID; o0 = File Name (text); o1 = Segment Count (numeric); o2 = Time Stamp (numeric); o3 = Sender (text); o4 = Addressee (text); o5 = File Size (numeric); o6 = Checksum (numeric). NOTES: Parameters t, s and f are required for a Macro Control Block, all other parametrs are optional. To use a comma character ',' on text options, replace it with the character 255: "\xff".</li><li>QRCODE : QRcode Low error correction</li><li>QRCODE,L : QRcode Low error correction</li><li>QRCODE,M : QRcode Medium error correction</li><li>QRCODE,Q : QRcode Better error correction</li><li>QRCODE,H : QR-CODE Best error correction</li><li>RAW: raw mode - comma-separad list of array rows</li><li>RAW2: raw mode - array rows are surrounded by square parenthesis.</li><li>TEST : Test matrix</li></ul>
250 * @return array
251 */
252 public function setBarcode($code, $type) {
253 $mode = explode(',', $type);
254 $qrtype = strtoupper($mode[0]);
255 switch ($qrtype) {
256 case 'DATAMATRIX': { // DATAMATRIX (ISO/IEC 16022)
257 require_once(dirname(__FILE__).'/include/barcodes/datamatrix.php');
258 $qrcode = new Datamatrix($code);
259 $this->barcode_array = $qrcode->getBarcodeArray();
260 $this->barcode_array['code'] = $code;
261 break;
262 }
263 case 'PDF417': { // PDF417 (ISO/IEC 15438:2006)
264 require_once(dirname(__FILE__).'/include/barcodes/pdf417.php');
265 if (!isset($mode[1]) OR ($mode[1] === '')) {
266 $aspectratio = 2; // default aspect ratio (width / height)
267 } else {
268 $aspectratio = floatval($mode[1]);
269 }
270 if (!isset($mode[2]) OR ($mode[2] === '')) {
271 $ecl = -1; // default error correction level (auto)
272 } else {
273 $ecl = intval($mode[2]);
274 }
275 // set macro block
276 $macro = array();
277 if (isset($mode[3]) AND ($mode[3] !== '') AND isset($mode[4]) AND ($mode[4] !== '') AND isset($mode[5]) AND ($mode[5] !== '')) {
278 $macro['segment_total'] = intval($mode[3]);
279 $macro['segment_index'] = intval($mode[4]);
280 $macro['file_id'] = strtr($mode[5], "\xff", ',');
281 for ($i = 0; $i < 7; ++$i) {
282 $o = $i + 6;
283 if (isset($mode[$o]) AND ($mode[$o] !== '')) {
284 // add option
285 $macro['option_'.$i] = strtr($mode[$o], "\xff", ',');
286 }
287 }
288 }
289 $qrcode = new PDF417($code, $ecl, $aspectratio, $macro);
290 $this->barcode_array = $qrcode->getBarcodeArray();
291 $this->barcode_array['code'] = $code;
292 break;
293 }
294 case 'QRCODE': { // QR-CODE
295 require_once(dirname(__FILE__).'/include/barcodes/qrcode.php');
296 if (!isset($mode[1]) OR (!in_array($mode[1],array('L','M','Q','H')))) {
297 $mode[1] = 'L'; // Ddefault: Low error correction
298 }
299 $qrcode = new QRcode($code, strtoupper($mode[1]));
300 $this->barcode_array = $qrcode->getBarcodeArray();
301 $this->barcode_array['code'] = $code;
302 break;
303 }
304 case 'RAW':
305 case 'RAW2': { // RAW MODE
306 // remove spaces
307 $code = preg_replace('/[\s]*/si', '', $code);
308 if (strlen($code) < 3) {
309 break;
310 }
311 if ($qrtype == 'RAW') {
312 // comma-separated rows
313 $rows = explode(',', $code);
314 } else { // RAW2
315 // rows enclosed in square parentheses
316 $code = substr($code, 1, -1);
317 $rows = explode('][', $code);
318 }
319 $this->barcode_array['num_rows'] = count($rows);
320 $this->barcode_array['num_cols'] = strlen($rows[0]);
321 $this->barcode_array['bcode'] = array();
322 foreach ($rows as $r) {
323 $this->barcode_array['bcode'][] = str_split($r, 1);
324 }
325 $this->barcode_array['code'] = $code;
326 break;
327 }
328 case 'TEST': { // TEST MODE
329 $this->barcode_array['num_rows'] = 5;
330 $this->barcode_array['num_cols'] = 15;
331 $this->barcode_array['bcode'] = array(
332 array(1,1,1,0,1,1,1,0,1,1,1,0,1,1,1),
333 array(0,1,0,0,1,0,0,0,1,0,0,0,0,1,0),
334 array(0,1,0,0,1,1,0,0,1,1,1,0,0,1,0),
335 array(0,1,0,0,1,0,0,0,0,0,1,0,0,1,0),
336 array(0,1,0,0,1,1,1,0,1,1,1,0,0,1,0));
337 $this->barcode_array['code'] = $code;
338 break;
339 }
340 default: {
341 $this->barcode_array = false;
342 }
343 }
344 }
345 } // end of class
346
347 //============================================================+
348 // END OF FILE
349 //============================================================+
350