/** * Print a two-dimensional data code using the PDF417 standard. * * @param string $content Text or numbers to store in the code * @param number $width Width of a module (pixel) in the printed code. * Default is 3 dots. * @param number $heightMultiplier Multiplier for height of a module. * Default is 3 times the width. * @param number $dataColumnCount Number of data columns to use. 0 (default) * is to auto-calculate. Smaller numbers will result in a narrower code, * making larger pixel sizes possible. Larger numbers require smaller pixel sizes. * @param real $ec Error correction ratio, from 0.01 to 4.00. Default is 0.10 (10%). * @param number $options Standard code Printer::PDF417_STANDARD with * start/end bars, or truncated code Printer::PDF417_TRUNCATED with start bars only. * @throws Exception If this profile indicates that PDF417 code is not supported */ public function pdf417Code($content, $width = 3, $heightMultiplier = 3, $dataColumnCount = 0, $ec = 0.1, $options = Printer::PDF417_STANDARD) { self::validateString($content, __FUNCTION__, 'content'); self::validateInteger($width, 2, 8, __FUNCTION__, 'width'); self::validateInteger($heightMultiplier, 2, 8, __FUNCTION__, 'heightMultiplier'); self::validateInteger($dataColumnCount, 0, 30, __FUNCTION__, 'dataColumnCount'); self::validateFloat($ec, 0.01, 4.0, __FUNCTION__, 'ec'); self::validateInteger($options, 0, 1, __FUNCTION__, 'options'); if ($content == "") { return; } if (!$this->profile->getSupportsPdf417Code()) { // TODO use software rendering via a library instead throw new Exception("PDF417 codes are not supported on your printer."); } $cn = '0'; // Code type for pdf417 code // Select model: standard or truncated $this->wrapperSend2dCodeData(chr(70), $cn, chr($options)); // Column count $this->wrapperSend2dCodeData(chr(65), $cn, chr($dataColumnCount)); // Set dot sizes $this->wrapperSend2dCodeData(chr(67), $cn, chr($width)); $this->wrapperSend2dCodeData(chr(68), $cn, chr($heightMultiplier)); // Set error correction ratio: 1% to 400% $ec_int = (int) ceil(floatval($ec) * 10); $this->wrapperSend2dCodeData(chr(69), $cn, chr($ec_int), '1'); // Send content & print $this->wrapperSend2dCodeData(chr(80), $cn, $content, '0'); $this->wrapperSend2dCodeData(chr(81), $cn, '', '0'); }