gifts2017

Простейший способ создания штрих-кода в формате PNG из командной строки в Linux Ubuntu

Опубликовал Сергей Рудюк (rudjuk) в раздел Программирование - Внешние компоненты

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

Итак, в Linux мы имеем прекрасную утилиту для генерации штрих-кода под названием barcode. Данная команда генерирует штрих-код в формате PostScript и Encapsulated Postscript.

Рассмотрим её описание:

$ barcode -h
barcode: Options:
   -i <arg>     input file (strings to encode), default is stdin
   -o <arg>     output file, default is stdout
   -b <arg>     string to encode (use input file if missing)
   -e <arg>     encoding type (default is best fit for first string)
   -u <arg>     unit ("mm", "in", ...) used to decode -g, -t, -p
   -g <arg>     geometry on the page: [<wid>x<hei>][+<margin>+<margin>]
   -t <arg>     table geometry: <cols>x<lines>[+<margin>+<margin>]
   -m <arg>     internal margin for each item in a table: <xm>[,<ym>]
   -n           "numeric": avoid printing text along with the bars
   -c           no Checksum character, if the chosen encoding allows it
   -E           print one code as eps file (default: multi-page ps)
   -P           create PCL output instead of postscript
   -p <arg>     page size (refer to the man page)

Known encodings are (synonyms appear on the same line):
        "ean", "ean13", "ean-13", "ean8", "ean-8"
        "upc", "upc-a", "upc-e"
        "isbn"
        "39", "code39"
        "128c", "code128c"
        "128b", "code128b"
        "128", "code128"
        "128raw"
        "i25", "interleaved 2 of 5"
        "cbr", "codabar"
        "msi"
        "pls", "plessey"
        "code93", "93"

Как видите, данная команда генерирует штрих-коды во всех основных стандартах.

Рассмотрим примеры использования:

Grand & Toy # 99773,

Label width: 44 mm
Label height: 12 mm
Horizontal gap between labels 8 mm
Vertical gap between labels: 1 mm
Top margin: 13 mm
Left margin: 8 mm

Should be:

yes 12345 | head -72 | barcode -p 8.5x11in -umm -t 4x18+8+13 -g 44x12+8+1 -e CODE39 > test.ps

But in fact:

yes 12345 | head -84 | barcode -p 8.5x11in -umm -t 4x21+0+0-0-12.8 -g 36x12+7+0 -m 5,0 -e CODE39 > test.ps; date '+%H:%M:%S'

Trying History 

$ barcode -umm -p letter -t 4x18+8+13 -g 44x12+8+1 -e CODE39  -b 1234567890 -b 1234567890 -b 1234567890 -b 1234567890 -b 1234567890 -b 1234567890 > test.ps
barcode: wrong page size specification "letter"
barcode: try "barcode --help"

-p 8.5x11in works.

$ yes 12345 | head -72 | barcode -umm -p 215x279mm -t 4x18+0+12-0-12 -g 32x8.5+7+0 -m 0,0 -e CODE39 > test.ps; lpr test.ps; date '+%H:%M:%S'
15:44:48
# add l/r margin = 8
$ yes 12345 | head -72 | barcode -umm -p 215x279mm -t 4x18+0+12-0-12 -g 32x8.5+7+0 -m 8,0 -e CODE39 > test.ps; lpr test.ps; date '+%H:%M:%S'
16:10:30
$ yes 12345 | head -80 | barcode -p 8.5x11in -umm -t 4x20+8+13 -g 44x12+8+0 -m 5,0 -e CODE39 > test.ps; date '+%H:%M:%S'
09:35:57
$ yes 12345 | head -84 | barcode -p 8.5x11in -umm -t 4x21+8+0-8-12 -g 44x12+8+0 -m 5,0 -e CODE39 > test.ps; date '+%H:%M:%S'
10:37:04
$ yes 12345 | head -84 | barcode -p 8.5x11in -umm -t 4x21+0+0-0-12.8 -g 36x12+7+0 -m 5,0 -e CODE39 > test.ps; date '+%H:%M:%S'
11:18:40

Преобразование PS-файла в PNG

Конечно, все прекрасно, но нам же нужно получить формат файла - PNG. Тут на выручку нам приходит команда преобразования форматов графических файлов:

convert <Название исходного файла> <Название результирующего файла>

Генерация изображения с заданной четкостью:

convert -density 300 sierraf.eps sierraf.png

Генерация изображения заданного размера:

convert -density 300 IN.eps -resize 600x400 -transparent white OUT.png

Генерация штрих-кода в PNG-формате

Соединим обе команды для генерация штрих-кода символьного значения в формате CODE128:

barcode p 8.5x11in -umm -e 'code128' -b 12345678 > img.ps
convert img.ps img.png

Таким образом, 2-мя строчками мы можем получить изображение практически в любом графическом формате (не только jpg) практически любого штрих-кода.

Автор: Рудюк С . А. http://corp2.net

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Сергѣй Батанов (baton_pk) 29.06.15 22:03
можно в одну строчку, если кому интересно :)
barcode p 8.5x11in -umm -e 'code128' -b 12345678 | convert - img.png
2. Сергей Рудюк (rudjuk) 30.06.15 09:11
Да, можно одной строчкой, об этом я писал в оригинале статьи:
Генерация штрих-кода для вставки его в 1С при работе в Linux

Так же, может заинтересовать программная реализация в 1С:
Генерация изображения штрих-кода в 1С при работе в Linux
3. Сергѣй Батанов (baton_pk) 30.06.15 09:22
(2) rudjuk,
ну, там хоть и в одну строчку, но зачем-то промежуточный файл используется.
4. Сергей Рудюк (rudjuk) 30.06.15 14:26
А, ну да, эффективней без файла.
5. q_i 30.06.15 21:34
Zint умеет сохранять в PNG напрямую.
6. Сергей Рудюк (rudjuk) 30.06.15 22:11
Zint работает из командной строки ?
7. Евгений Сосна (pumbaE) 01.07.15 09:43
Забыли написать, какие пакеты необходимо установить для появления командного файла convert ...
baton_pk; +1 Ответить
8. Сергей Рудюк (rudjuk) 01.07.15 10:48
Созвучный. Насколько я помню:
apt-get install convert
10. Сергѣй Батанов (baton_pk) 01.07.15 15:14
imagemagick надо ставить. убунта вообще добрая - сразу говорит, что нужно поставить :)

dmpas@dmpas:~$ convert
Приложение 'convert' может быть найдено в следующих пакетах:
 * imagemagick
 * graphicsmagick-imagemagick-compat
Попробуйте: sudo apt-get install <выбранный пакет>


...Показать Скрыть
11. Сергей Рудюк (rudjuk) 01.07.15 16:58
Да, точно, convert входит в imagemagic о чем Убунта и говорит.
12. Сергей Рудюк (rudjuk) 01.07.15 17:02
13. АНДРЕЙ Фамилия (MegaMouse) 01.07.15 17:48
а разве теперь 1с без imagemagick работает??
Раньше добивало что 1с не стартовала пока все это добро не поставишь, а после того как перероеш весь гугл и заставишь 1с работать первым делом выскакивает подсказка что и каким образом надо установить чтоб оно заработало.

Полагаю что если 1с работает, то данный способ стартанет без лишних телодвижений
14. Сергей Рудюк (rudjuk) 01.07.15 22:23
Да, в инструкции по установке 1С8.3 imagemagick нужно ставить. В принципе, это делается легко. Видимо, 1С использует графические библиотеки из данного пакета.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа