Автор: Рудюк С . А.
https://corp2.net
E-Mail: rs@corp2.net
В Linux есть огромное количество способов создания линейного штрих-кода. В данной статье мы рассмотрим, как сгенерировать графическое изображение штрих-кода прямо из командной строки. При этом, решение будет совершенно бесплатным и очень простым как в установке так и в использовании.
Итак, в Linux мы имеем прекрасную утилиту для генерации штрих-кода под названием barcode. Данная команда генерирует штрих-код в формате PostScript и Encapsulated Postscript.
Рассмотрим её описание:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
$ 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,
1 2 3 4 5 6 |
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:
1 |
yes 12345 | head -72 | barcode -p 8.5x11in -umm -t 4x18+8+13 -g 44x12+8+1 -e CODE39 > test.ps |
But in fact:
1 |
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' |
1 2 3 |
$ 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.
1 2 |
$ 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 |
1 2 3 |
# 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 |
1 2 |
$ 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 |
1 2 |
$ 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 |
1 2 |
$ 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. Тут на выручку нам приходит команда преобразования форматов графических файлов:
1 |
convert <Название исходного файла> <Название результирующего файла> |
Генерация изображения с заданной четкостью:
1 |
convert -density 300 sierraf.eps sierraf.png |
Генерация изображения заданного размера:
1 |
convert -density 300 IN.eps -resize 600x400 -transparent white OUT.png |
Генерация штрих-кода в PNG-формате
Соединим обе команды для генерация штрих-кода символьного значения в формате CODE128:
1 2 |
barcode p 8.5x11in -umm -e 'code128' -b 12345678 > img.ps convert img.ps img.png |
Таким образом, 2-мя строчками мы можем получить изображение практически в любом графическом формате (не только jpg) практически любого штрих-кода.
Автор: Рудюк С . А. https://corp2.net
Leave a Reply