2013-02-08 1 views
1

Мне нужно сгенерировать метки с code128 barcodes в PHP. Они будут напечатаны пользователями практически с любого принтера.Печатать (генерировать) код128 штрих-код (или любое изображение) в миллиметрах (php)

У меня есть некоторые конкретные наборы требований:

  • Узость бар должен быть между 0.375mm и 0.5mm

  • максимальная общая ширина штрих-код: 115мм

  • первые 8 цифр должны использовать подмножество B
  • Остальные 20 цифр должны использовать подмножество C
  • код должен быть доступен для чтения на высокой скорости s

Я попробовал несколько библиотек штрих-кодов, но большинство из них не позволяют указывать минимальную ширину штриха в миллиметрах. Вы просто можете масштабировать ширину узкой полосы с фиксированными целыми приращениями, а 1 слишком мала и 2 слишком велика :)

Я также попытался передискретизировать изображение с помощью gd lib, но код становится нечитаемым на высоких скоростях ,

Должен ли я создать собственный генератор кода? Если да, то как бы я мог создавать столбцы в миллиметрах?

Заранее спасибо

+0

Как отредактировать библиотеку штрих-кодов, чтобы добавить эту функциональность? – HamZa

+3

Ненавижу, чтобы разбить его вам, но почти невозможно получить измерения в миллиметрах без контроля над принтером. Если пользователь изменил настройки своего DPI - он выключен. Если их принтер не самый точный, он выключен. Это будет непросто, не зная принтеров и компьютеров, используемых для их печати. –

+0

Точная печать не входит в компетенцию всемирной сети, если только вы не установите пользователю плагин. Менее плохим решением является формат формата PDF (но даже в этом случае пользователь может свободно изменять размер при печати). –

ответ

2

Хорошо, я полагаю, что я нашел решение, которое относится не к каждому броузера и принтера комбинации, но это мне подходит хорошо.

Я использую библиотеку php barodegen, найденную по адресу barcodegen, потому что это единственный, который позволяет мне указать подмножество для некоторых символов, а другое для других.

В моей конкретной проблемы, я могу это сделать:

$setB = '%'.substr($vars->code, 0, 7); 
$setC = substr($vars->code, 7); 

$code_array = array(array(CODE128_B, $setB), array(CODE128_C, $setC)); 

А потом разобрать $ code_array в штрих-код.

Теперь другая проблема также просто решена путем установки точки на дюйм созданного изображения штрих-кода. Это называется, ошибочно, я думаю, DPI. Исправьте меня, если я ошибаюсь, но DPI - это характерная черта для принтера. Вы не можете это изменить. PPI, с другой стороны, вы можете изменить.

В моей проблеме у меня было изображение шириной 244 пикселя, и мне нужно было его распечатать более чем на 95 мм. barcodegen позволяет сделать это по телефону

$drawing->setDPI(64); 
// I do think they should rename this to setPPI 

Теперь, после того, как у вас есть 224px изображение с 64ppi, все, что вам нужно сделать, это показать его в IMG тег, как это:

<img style="width: 96.8375mm;" src="interlink_code128_barcode.php?code='.$code128.'" border="0"> 

в 96.8375мм получается путем решения простого уравнения, если изображение содержит 64 пикселя в один дюйм, сколько сантиметров займет 244 пикселя? И затем вы преобразовываете дюймы в мм

У меня нет подтверждения, что штрих-коды можно читать с высокой скоростью, но я вижу, что распечатки выглядят остро! : D

0

Здравствуйте, возможно, это URL может помочь. Из-за индивидуальных конфигураций принтера вы можете использовать миллиметры. Однако, если конфигурирование принтера, чем проблема. URL: http://www.davidscotttufts.com/2009/03/31/how-to-create-barcodes-in-php/

+0

попробует это, спасибо. – Gringo

0

ZF Barcode позволит вам изменить толщину цифр.

http://framework.zend.com/manual/1.12/en/zend.barcode.creation.html

анс она поддерживает Code128.

$config = new Zend_Config(array(
        'barcode' => 'code128', 
        'barcodeParams' => array('text' => 'ZEND-FRAMEWORK', 'thickWidth' => 10, 'thinWidth' => 5), 
        'renderer' => 'image', 
        'rendererParams' => array('imageType' => 'gif'), 
       )); 
    Zend_Barcode::factory($config)->render(); 
+0

Каковы единицы этих значений? – Gringo

+1

мой плохой, я вижу, что у Zend есть эти «рендереры». Но в вашем примере вы используете средство визуализации изображений, в котором ширина по умолчанию для модуля составляет 1 пиксель. – Gringo

+0

Должен ли я пойти и исследовать Zend_Barcode_Renderer_Pdf? – Gringo

0

Я не смог точно ударить 115 мм. Вот тот, который будет печатать на чуть более 116 мм на всех трех моих принтерах, а также в IE или Firefox. Регулировка ширины до 19 приводит к уменьшению примерно до 109 мм ...

Я использую отдельное png-изображение для каждого символа и накладываю его вместе на стороне клиента. Полный Code128 симвология с помощью этой техники можно найти на http://notionovus.com/blog/barcodes/html/code-128-barcode/

<img 
alt="104,{Start B}" title="104,{Start B}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/AC3gAT0BDuLeG4IAAAAASUVORK5CYII=" width="20" height="30"><img 
alt=" 33,A:{A},B:{A}" title=" 33,A:{A},B:{A}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/AFzgAZsBPUCFhSIAAAAASUVORK5CYII=" width="20" height="30"><img 
alt=" 34,A:{B},B:{B}" title=" 34,A:{B},B:{B}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/AHTgAcsBVYSvxaMAAAAASUVORK5CYII=" width="20" height="30"><img 
alt=" 35,A:{C},B:{C}" title=" 35,A:{C},B:{C}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/AHcgAREAmJf+YHwAAAAASUVORK5CYII=" width="20" height="30"><img 
alt=" 36,A:{D},B:{D}" title=" 36,A:{D},B:{D}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/AE7gAX8BL1PJL4YAAAAASUVORK5CYII=" width="20" height="30"><img 
alt=" 37,A:{E},B:{E}" title=" 37,A:{E},B:{E}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/AHLgAccBU7KPeu8AAAAASUVORK5CYII=" width="20" height="30"><img 
alt=" 38,A:{F},B:{F}" title=" 38,A:{F},B:{F}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/AHOgAYkBFLOchfoAAAAASUVORK5CYII=" width="20" height="30"><img 
alt=" 39,A:{G},B:{G}" title=" 39,A:{G},B:{G}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/AC7gAT8BDxDJjdQAAAAASUVORK5CYII=" width="20" height="30"><img 
alt=" 40,A:{H},B:{H}" title=" 40,A:{H},B:{H}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/ADrgAVcBG9SQg7wAAAAASUVORK5CYII=" width="20" height="30"><img 
alt=" 99,A:{Switch C},B:{Switch C}" title=" 99,A:{Switch C},B:{Switch C}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/AEQgAKsAZaZph30AAAAASUVORK5CYII=" width="20" height="30"><img 
alt=" 01,A:{!},B:{!}" title=" 01,A:{!},B:{!}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/ADJgAMcAkzbyVIUAAAAASUVORK5CYII=" width="20" height="30"><img 
alt=" 23,A:{7},B:{7}" title=" 23,A:{7},B:{7}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/ABIgAEcAM15OsZIAAAAASUVORK5CYII=" width="20" height="30"><img 
alt=" 45,A:{M},B:{M}" title=" 45,A:{M},B:{M}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/AETgAWsBJQmo7lIAAAAASUVORK5CYII=" width="20" height="30"><img 
alt=" 67,A:{ETX},B:{c}" title=" 67,A:{ETX},B:{c}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/AHpgAVcA2+hRyrMAAAAASUVORK5CYII=" width="20" height="30"><img 
alt=" 89,A:{EM},B:{y}" title=" 89,A:{EM},B:{y}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/ACQgAGsARQRcPq8AAAAASUVORK5CYII=" width="20" height="30"><img 
alt=" 01,A:{!},B:{!}" title=" 01,A:{!},B:{!}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/ADJgAMcAkzbyVIUAAAAASUVORK5CYII=" width="20" height="30"><img 
alt=" 23,A:{7},B:{7}" title=" 23,A:{7},B:{7}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/ABIgAEcAM15OsZIAAAAASUVORK5CYII=" width="20" height="30"><img 
alt=" 45,A:{M},B:{M}" title=" 45,A:{M},B:{M}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/AETgAWsBJQmo7lIAAAAASUVORK5CYII=" width="20" height="30"><img 
alt=" 67,A:{ETX},B:{c}" title=" 67,A:{ETX},B:{c}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/AHpgAVcA2+hRyrMAAAAASUVORK5CYII=" width="20" height="30"><img 
alt=" 89,A:{EM},B:{y}" title=" 89,A:{EM},B:{y}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/ACQgAGsARQRcPq8AAAAASUVORK5CYII=" width="20" height="30"><img 
alt=" 46,A:{N},B:{N}" title=" 46,A:{N},B:{N}" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAABAQMAAAAy+cYDAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/AEcgALEAaE/9r8gAAAAASUVORK5CYII=" width="20" height="30"><img 
alt="106,{Stop}"title="106,{Stop}"src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAABAQMAAAA/57ZEAAAABlBMVEUAAAD///+l2Z/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAADklEQVQIHQEDAPz/ADigARMA2dpJzT8AAAAASUVORK5CYII=" width="20" height="30"> 
+0

Итак, что вы говорите, я должен создать собственный штрих-код путем «конкатенирования» нескольких конкретных значений ширины в миллиметрах? – Gringo

+0

Мне нравится, как вы просто закодировали все в base64 :) – Gringo

+0

Я использовал шрифты штрих-кода еще в 1987 году, но у меня была такая же проблема с контролем над точной шириной окончательного штрих-кода, и мой клиент хотел, чтобы я попал в цель довольно точно. Поэтому я изучил PostScript-язык и создал нечто похожее на вышесказанное в PostScript. Мысль о штрих-кодах, как о мельчайших сериях точек и пробелов и масштабировании от практически невидимого до полного размера, дала мне необходимый мне контроль. В прошлом году я начал искать другую работу и решил модернизировать свою 25-летнюю технику для WWW. Легче при создании с помощью javascript или excel. –

Смежные вопросы