Skip to content

Commit

Permalink
Added Code39 method that generates barcodes.
Browse files Browse the repository at this point in the history
  • Loading branch information
rudissaar committed Jan 16, 2018
1 parent 428f36d commit 0cabca3
Showing 1 changed file with 94 additions and 0 deletions.
94 changes: 94 additions & 0 deletions FPDFPlus.php
Original file line number Diff line number Diff line change
Expand Up @@ -116,4 +116,98 @@ public function GetLeftMargin()
{
return (float) $this->lMargin;
}

/**
* This method implements Code 39 barcodes.
* A Code 39 barcode can encode a string with the following characters: digits (0 to 9),
* uppercase letters (A to Z) and 8 additional characters (- . space $ / + % *).
*
* Source: http://www.fpdf.org/en/script/script46.php
*
* @param float $xpos
* @param float $ypos
* @param string $code
* @param float $baseline
* @param float $height
*/
public function Code39($xpos, $ypos, $code, $baseline = 0.5, $height = 5)
{
$wide = $baseline;
$narrow = $baseline / 3 ;
$gap = $narrow;

$barChar['0'] = 'nnnwwnwnn';
$barChar['1'] = 'wnnwnnnnw';
$barChar['2'] = 'nnwwnnnnw';
$barChar['3'] = 'wnwwnnnnn';
$barChar['4'] = 'nnnwwnnnw';
$barChar['5'] = 'wnnwwnnnn';
$barChar['6'] = 'nnwwwnnnn';
$barChar['7'] = 'nnnwnnwnw';
$barChar['8'] = 'wnnwnnwnn';
$barChar['9'] = 'nnwwnnwnn';
$barChar['A'] = 'wnnnnwnnw';
$barChar['B'] = 'nnwnnwnnw';
$barChar['C'] = 'wnwnnwnnn';
$barChar['D'] = 'nnnnwwnnw';
$barChar['E'] = 'wnnnwwnnn';
$barChar['F'] = 'nnwnwwnnn';
$barChar['G'] = 'nnnnnwwnw';
$barChar['H'] = 'wnnnnwwnn';
$barChar['I'] = 'nnwnnwwnn';
$barChar['J'] = 'nnnnwwwnn';
$barChar['K'] = 'wnnnnnnww';
$barChar['L'] = 'nnwnnnnww';
$barChar['M'] = 'wnwnnnnwn';
$barChar['N'] = 'nnnnwnnww';
$barChar['O'] = 'wnnnwnnwn';
$barChar['P'] = 'nnwnwnnwn';
$barChar['Q'] = 'nnnnnnwww';
$barChar['R'] = 'wnnnnnwwn';
$barChar['S'] = 'nnwnnnwwn';
$barChar['T'] = 'nnnnwnwwn';
$barChar['U'] = 'wwnnnnnnw';
$barChar['V'] = 'nwwnnnnnw';
$barChar['W'] = 'wwwnnnnnn';
$barChar['X'] = 'nwnnwnnnw';
$barChar['Y'] = 'wwnnwnnnn';
$barChar['Z'] = 'nwwnwnnnn';
$barChar['-'] = 'nwnnnnwnw';
$barChar['.'] = 'wwnnnnwnn';
$barChar[' '] = 'nwwnnnwnn';
$barChar['*'] = 'nwnnwnwnn';
$barChar['$'] = 'nwnwnwnnn';
$barChar['/'] = 'nwnwnnnwn';
$barChar['+'] = 'nwnnnwnwn';
$barChar['%'] = 'nnnwnwnwn';

$this->SetFillColor(0);
$code = '*' . strtoupper($code) . '*';

for ($i = 0; $i < strlen($code); $i++) {
$char = $code[$i];

if (!isset($barChar[$char])) {
$this->Error('Invalid character in barcode: ' . $char);
}

$seq = $barChar[$char];

for ($bar = 0; $bar < 9; $bar++) {
if ($seq[$bar] === 'n') {
$lineWidth = $narrow;
} else {
$lineWidth = $wide;
}

if ($bar % 2 === 0) {
$this->Rect($xpos, $ypos, $lineWidth, $height, 'F');
}

$xpos += $lineWidth;
}

$xpos += $gap;
}
}
}

0 comments on commit 0cabca3

Please sign in to comment.