PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.3
GiveWP – Donation Plugin and Fundraising Platform v4.16.3
4.16.3 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 / vendor / tecnickcom / tcpdf / tcpdf_barcodes_2d.php
give / vendor / tecnickcom / tcpdf Last commit date
config 2 months ago fonts 7 years ago include 2 months ago tools 2 months ago CHANGELOG.TXT 2 months ago LICENSE.TXT 2 months ago Makefile 2 months ago VERSION 2 months ago tcpdf.php 2 months ago tcpdf_autoconfig.php 2 months ago tcpdf_barcodes_1d.php 2 months ago tcpdf_barcodes_2d.php 2 months ago
tcpdf_barcodes_2d.php
352 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 (https://www.gnu.org/copyleft/lesser.html)
9 // -------------------------------------------------------------------
10 // Copyright (C) 2009-2026 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 <https://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 = array();
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 string $code code to print
66 * @param string $type 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 parameters 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 int $w Width of a single rectangle element in user units.
83 * @param int $h Height of a single rectangle element in user units.
84 * @param string $color 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 int $w Width of a single rectangle element in user units.
103 * @param int $h Height of a single rectangle element in user units.
104 * @param string $color 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 int $w Width of a single rectangle element in pixels.
139 * @param int $h Height of a single rectangle element in pixels.
140 * @param string $color 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 int $w Width of a single rectangle element in pixels.
168 * @param int $h Height of a single rectangle element in pixels.
169 * @param array $color 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 int $w Width of a single rectangle element in pixels.
188 * @param int $h Height of a single rectangle element in pixels.
189 * @param array $color RGB (0-255) foreground color for bar elements (background is transparent).
190 * @return string|Imagick|false 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 if (PHP_VERSION_ID < 80000) {
242 imagedestroy($png);
243 }
244 return $imagedata;
245 }
246 }
247
248 /**
249 * Set the barcode.
250 * @param string $code code to print
251 * @param string $type 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 parameters 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>
252 * @return void
253 */
254 public function setBarcode($code, $type) {
255 $mode = explode(',', $type);
256 $qrtype = strtoupper($mode[0]);
257 switch ($qrtype) {
258 case 'DATAMATRIX': { // DATAMATRIX (ISO/IEC 16022)
259 require_once(dirname(__FILE__).'/include/barcodes/datamatrix.php');
260 $qrcode = new Datamatrix($code);
261 $this->barcode_array = $qrcode->getBarcodeArray();
262 $this->barcode_array['code'] = $code;
263 break;
264 }
265 case 'PDF417': { // PDF417 (ISO/IEC 15438:2006)
266 require_once(dirname(__FILE__).'/include/barcodes/pdf417.php');
267 if (!isset($mode[1]) OR ($mode[1] === '')) {
268 $aspectratio = 2; // default aspect ratio (width / height)
269 } else {
270 $aspectratio = floatval($mode[1]);
271 }
272 if (!isset($mode[2]) OR ($mode[2] === '')) {
273 $ecl = -1; // default error correction level (auto)
274 } else {
275 $ecl = intval($mode[2]);
276 }
277 // set macro block
278 $macro = array();
279 if (isset($mode[3]) AND ($mode[3] !== '') AND isset($mode[4]) AND ($mode[4] !== '') AND isset($mode[5]) AND ($mode[5] !== '')) {
280 $macro['segment_total'] = intval($mode[3]);
281 $macro['segment_index'] = intval($mode[4]);
282 $macro['file_id'] = strtr($mode[5], "\xff", ',');
283 for ($i = 0; $i < 7; ++$i) {
284 $o = $i + 6;
285 if (isset($mode[$o]) AND ($mode[$o] !== '')) {
286 // add option
287 $macro['option_'.$i] = strtr($mode[$o], "\xff", ',');
288 }
289 }
290 }
291 $qrcode = new PDF417($code, $ecl, $aspectratio, $macro);
292 $this->barcode_array = $qrcode->getBarcodeArray();
293 $this->barcode_array['code'] = $code;
294 break;
295 }
296 case 'QRCODE': { // QR-CODE
297 require_once(dirname(__FILE__).'/include/barcodes/qrcode.php');
298 if (!isset($mode[1]) OR (!in_array($mode[1],array('L','M','Q','H')))) {
299 $mode[1] = 'L'; // Ddefault: Low error correction
300 }
301 $qrcode = new QRcode($code, strtoupper($mode[1]));
302 $this->barcode_array = $qrcode->getBarcodeArray();
303 $this->barcode_array['code'] = $code;
304 break;
305 }
306 case 'RAW':
307 case 'RAW2': { // RAW MODE
308 // remove spaces
309 $code = preg_replace('/[\s]*/si', '', $code);
310 if (strlen($code) < 3) {
311 break;
312 }
313 if ($qrtype == 'RAW') {
314 // comma-separated rows
315 $rows = explode(',', $code);
316 } else { // RAW2
317 // rows enclosed in square parentheses
318 $code = substr($code, 1, -1);
319 $rows = explode('][', $code);
320 }
321 $this->barcode_array['num_rows'] = count($rows);
322 $this->barcode_array['num_cols'] = strlen($rows[0]);
323 $this->barcode_array['bcode'] = array();
324 foreach ($rows as $r) {
325 $this->barcode_array['bcode'][] = str_split($r, 1);
326 }
327 $this->barcode_array['code'] = $code;
328 break;
329 }
330 case 'TEST': { // TEST MODE
331 $this->barcode_array['num_rows'] = 5;
332 $this->barcode_array['num_cols'] = 15;
333 $this->barcode_array['bcode'] = array(
334 array(1,1,1,0,1,1,1,0,1,1,1,0,1,1,1),
335 array(0,1,0,0,1,0,0,0,1,0,0,0,0,1,0),
336 array(0,1,0,0,1,1,0,0,1,1,1,0,0,1,0),
337 array(0,1,0,0,1,0,0,0,0,0,1,0,0,1,0),
338 array(0,1,0,0,1,1,1,0,1,1,1,0,0,1,0));
339 $this->barcode_array['code'] = $code;
340 break;
341 }
342 default: {
343 $this->barcode_array = array();
344 }
345 }
346 }
347 } // end of class
348
349 //============================================================+
350 // END OF FILE
351 //============================================================+
352