tcpdf_barcodes_2d.php Quellcode

tcpdf_barcodes_2d.php
gehe zur Dokumentation dieser Datei
1 <?php
2 //============================================================+
3 // File name : tcpdf_barcodes_2d.php
4 // Version : 1.0.014
5 // Begin : 2009-04-07
6 // Last Update : 2013-03-17
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-2013 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 
51 
56  protected $barcode_array = false;
57 
68  public function __construct($code, $type) {
69  $this->setBarcode($code, $type);
70  }
71 
76  public function getBarcodeArray() {
77  return $this->barcode_array;
78  }
79 
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 
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 
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 
173  public function getBarcodePNG($w=3, $h=3, $color=array(0,0,0)) {
174  // calculate image size
175  $width = ($this->barcode_array['num_cols'] * $w);
176  $height = ($this->barcode_array['num_rows'] * $h);
177  if (function_exists('imagecreate')) {
178  // GD library
179  $imagick = false;
180  $png = imagecreate($width, $height);
181  $bgcol = imagecolorallocate($png, 255, 255, 255);
182  imagecolortransparent($png, $bgcol);
183  $fgcol = imagecolorallocate($png, $color[0], $color[1], $color[2]);
184  } elseif (extension_loaded('imagick')) {
185  $imagick = true;
186  $bgcol = new imagickpixel('rgb(255,255,255');
187  $fgcol = new imagickpixel('rgb('.$color[0].','.$color[1].','.$color[2].')');
188  $png = new Imagick();
189  $png->newImage($width, $height, 'none', 'png');
190  $bar = new imagickdraw();
191  $bar->setfillcolor($fgcol);
192  } else {
193  return false;
194  }
195  // print barcode elements
196  $y = 0;
197  // for each row
198  for ($r = 0; $r < $this->barcode_array['num_rows']; ++$r) {
199  $x = 0;
200  // for each column
201  for ($c = 0; $c < $this->barcode_array['num_cols']; ++$c) {
202  if ($this->barcode_array['bcode'][$r][$c] == 1) {
203  // draw a single barcode cell
204  if ($imagick) {
205  $bar->rectangle($x, $y, ($x + $w - 1), ($y + $h - 1));
206  } else {
207  imagefilledrectangle($png, $x, $y, ($x + $w - 1), ($y + $h - 1), $fgcol);
208  }
209  }
210  $x += $w;
211  }
212  $y += $h;
213  }
214  // send headers
215  header('Content-Type: image/png');
216  header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
217  header('Pragma: public');
218  header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
219  header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
220  if ($imagick) {
221  $png->drawimage($bar);
222  echo $png;
223  } else {
224  imagepng($png);
225  imagedestroy($png);
226  }
227  }
228 
235  public function setBarcode($code, $type) {
236  $mode = explode(',', $type);
237  $qrtype = strtoupper($mode[0]);
238  switch ($qrtype) {
239  case 'DATAMATRIX': { // DATAMATRIX (ISO/IEC 16022)
240  require_once(dirname(__FILE__).'/include/barcodes/datamatrix.php');
241  $qrcode = new Datamatrix($code);
242  $this->barcode_array = $qrcode->getBarcodeArray();
243  $this->barcode_array['code'] = $code;
244  break;
245  }
246  case 'PDF417': { // PDF417 (ISO/IEC 15438:2006)
247  require_once(dirname(__FILE__).'/include/barcodes/pdf417.php');
248  if (!isset($mode[1]) OR ($mode[1] === '')) {
249  $aspectratio = 2; // default aspect ratio (width / height)
250  } else {
251  $aspectratio = floatval($mode[1]);
252  }
253  if (!isset($mode[2]) OR ($mode[2] === '')) {
254  $ecl = -1; // default error correction level (auto)
255  } else {
256  $ecl = intval($mode[2]);
257  }
258  // set macro block
259  $macro = array();
260  if (isset($mode[3]) AND ($mode[3] !== '') AND isset($mode[4]) AND ($mode[4] !== '') AND isset($mode[5]) AND ($mode[5] !== '')) {
261  $macro['segment_total'] = intval($mode[3]);
262  $macro['segment_index'] = intval($mode[4]);
263  $macro['file_id'] = strtr($mode[5], "\xff", ',');
264  for ($i = 0; $i < 7; ++$i) {
265  $o = $i + 6;
266  if (isset($mode[$o]) AND ($mode[$o] !== '')) {
267  // add option
268  $macro['option_'.$i] = strtr($mode[$o], "\xff", ',');
269  }
270  }
271  }
272  $qrcode = new PDF417($code, $ecl, $aspectratio, $macro);
273  $this->barcode_array = $qrcode->getBarcodeArray();
274  $this->barcode_array['code'] = $code;
275  break;
276  }
277  case 'QRCODE': { // QR-CODE
278  require_once(dirname(__FILE__).'/include/barcodes/qrcode.php');
279  if (!isset($mode[1]) OR (!in_array($mode[1],array('L','M','Q','H')))) {
280  $mode[1] = 'L'; // Ddefault: Low error correction
281  }
282  $qrcode = new QRcode($code, strtoupper($mode[1]));
283  $this->barcode_array = $qrcode->getBarcodeArray();
284  $this->barcode_array['code'] = $code;
285  break;
286  }
287  case 'RAW':
288  case 'RAW2': { // RAW MODE
289  // remove spaces
290  $code = preg_replace('/[\s]*/si', '', $code);
291  if (strlen($code) < 3) {
292  break;
293  }
294  if ($qrtype == 'RAW') {
295  // comma-separated rows
296  $rows = explode(',', $code);
297  } else { // RAW2
298  // rows enclosed in square parentheses
299  $code = substr($code, 1, -1);
300  $rows = explode('][', $code);
301  }
302  $this->barcode_array['num_rows'] = count($rows);
303  $this->barcode_array['num_cols'] = strlen($rows[0]);
304  $this->barcode_array['bcode'] = array();
305  foreach ($rows as $r) {
306  $this->barcode_array['bcode'][] = str_split($r, 1);
307  }
308  $this->barcode_array['code'] = $code;
309  break;
310  }
311  case 'TEST': { // TEST MODE
312  $this->barcode_array['num_rows'] = 5;
313  $this->barcode_array['num_cols'] = 15;
314  $this->barcode_array['bcode'] = array(
315  array(1,1,1,0,1,1,1,0,1,1,1,0,1,1,1),
316  array(0,1,0,0,1,0,0,0,1,0,0,0,0,1,0),
317  array(0,1,0,0,1,1,0,0,1,1,1,0,0,1,0),
318  array(0,1,0,0,1,0,0,0,0,0,1,0,0,1,0),
319  array(0,1,0,0,1,1,1,0,1,1,1,0,0,1,0));
320  $this->barcode_array['code'] = $code;
321  break;
322  }
323  default: {
324  $this->barcode_array = false;
325  }
326  }
327  }
328 } // end of class
329 
330 //============================================================+
331 // END OF FILE
332 //============================================================+




Korrekturen, Hinweise und Ergänzungen

Bitte scheuen Sie sich nicht und melden Sie, was auf dieser Seite sachlich falsch oder irreführend ist, was ergänzt werden sollte, was fehlt usw. Dazu bitte oben aus dem Menü Seite den Eintrag Support Forum wählen. Es ist eine kostenlose Anmeldung erforderlich, um Anmerkungen zu posten. Unpassende Postings, Spam usw. werden kommentarlos entfernt.