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

В 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

13 Comments

  1. baton_pk

    можно в одну строчку, если кому интересно 🙂

    barcode p 8.5x11in -umm -e ‘code128’ -b 12345678 | convert — img.png
    
    Reply
  2. rudjuk

    Да, можно одной строчкой, об этом я писал в оригинале статьи:

    Генерация штрих-кода для вставки его в 1С при работе в Linux

    Так же, может заинтересовать программная реализация в 1С:

    Генерация изображения штрих-кода в 1С при работе в Linux

    Reply
  3. baton_pk

    (2)

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

    Reply
  4. rudjuk

    А, ну да, эффективней без файла.

    Reply
  5. q_i

    Zint умеет сохранять в PNG напрямую.

    Reply
  6. rudjuk

    Zint работает из командной строки ?

    Reply
  7. pumbaE

    Забыли написать, какие пакеты необходимо установить для появления командного файла convert …

    Reply
  8. baton_pk

    imagemagick надо ставить. убунта вообще добрая — сразу говорит, что нужно поставить 🙂

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

    Показать

    Reply
  9. rudjuk

    Да, точно, convert входит в imagemagic о чем Убунта и говорит.

    Reply
  10. rudjuk

    apt-get install imagemagick

    Reply
  11. MegaMouse

    а разве теперь 1с без imagemagick работает??

    Раньше добивало что 1с не стартовала пока все это добро не поставишь, а после того как перероеш весь гугл и заставишь 1с работать первым делом выскакивает подсказка что и каким образом надо установить чтоб оно заработало.

    Полагаю что если 1с работает, то данный способ стартанет без лишних телодвижений

    Reply
  12. rudjuk

    Да, в инструкции по установке 1С8.3 imagemagick нужно ставить. В принципе, это делается легко. Видимо, 1С использует графические библиотеки из данного пакета.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *