Генерация PostScript штрих-кодов (barcode). Часть 1

Здравствуйте, товарищи! Недавно в интернете я наткнулся на одну отличную PostScript-библиотеку, благодаря которой можно легко сгенерировать множество различных баркодов под свои нужды, более того — она позволяет управлять множеством параметров в процессе генерации, такими как шрифты, положение служебных знаков, интервалы, цвета и много другое. И имя ей — BWIPP.

BWIPP — библиотека написанная на чистом PostScript, что понятно из полного названия — «Barcode Writer in Pure PostScript». Автор этого монстра — Терри Бартон, возможно кто-то знаком c одноименным сервисом онлайн-генерации баркодов. Также у BWIPP, есть страничка на Google code, где ее можно скачать и частично ознакомиться с возможностями.

После загрузки библиотеки мы можем ознакомиться с ее содержимым, открыв файл любым текстовым редактором. По сути, библиотека состоит из двух основных блоков:

  • Блок механизмов рендеринга баркодов, с описанием констант и прочих параметров;
  • Блок описания самих баркодов.

В процессе генерации баркода, мы можем передавать необходимые и дополнительные  параметры, которые зависят от типа баркода и механизма его рендеринга, если необходимые параметры не передать, то на стадии рендеринга все сломается или результат будет неожиданным (например, баркод без текста). Основная проблема заключается в понимании того, какие параметры необходимые и где найти дополнительные? Для этого мы обратимся к комментариям внутри библиотеки, которые начинаются с символа «%», все блоки обрамлены комментариями типа BEGIN (% —BEGIN RENDERER renlinear—) и END (% —END RENDERER renlinear—), а блоки геренации баркодов имеют еще и дополнительное описание, например, ISSN:

С необходимыми параметрами разобрались, теперь найдем дополнительные. После того, как мы определили механизм рендеринга (в нашем случае — renlinear), найдем строку с комментарием «% —BEGIN RENDERER renlinear—» — блок механизма, все что после комментариев «% Default options» (константы) и «% Apply the renderer options and the user options» (переопределение констант на пользовательские значения) — дополнительные опции, их довольно много, но они не всегда нужны, их названия говорят сами за себя, здесь и настройки шрифта и цвета, рамок и много другого.

Теперь можно попробовать вручную сгенерировать баркод. Сперва сделаем копию библиотеки и в самом низу, после комментария «% —END TEMPLATE—«, допишем следующее:

Первые 4 строчки — описание страницы, такие как размер, имя автора и прочие, в принципе, можно их опустить. Интерес представляют следующие 2 строки (это и есть вызов функции, генерирующей наш баркод из шаблона), опишу их подробнее:

50 50 moveto — положение X и Y левого нижнего угла баркода.

(1234-5678 01 12345) — входные данные.

(includetext guardwhitespace issntextsize=9 textsize=9 height=0.6 guardwidth=5 guardheight=6 guardrightpos=6 guardrightypos=36.5) — необходимые ( includetext и guardwhitespace) и дополнительные (все остальные, оставил их для примера) параметры:

issntextsize — рамер текста сверху баркода (взят из блока кода, описывающего issn),

textsize — размер текста кода, height-высота баркода (от 0 до 1),

guard… — параметры служебного знака в ISSN (символ «>» )

/issn — имя вызываемой функции

/uk.co.terryburton.bwipp findresource exec — не совсем понимаю значение всех аргументов, но по сути это запуск (:

Последние 4 строки — завершающие строки для PostScript.

Сохраняем файл после наших изменений и все готово. Не очень хорошо «тащить» всю библиотеку за каждым баркодом, но это просто и удобно. Также я бы не советовал ее урезать, в противном случае — делать это со знанием дела, почему? Например, для генерации ISSN-кода, BWIPP использует функции генерации разных кодов (ean2, ean5, ean13) в зависимости от входных данных, что не совсем очевидно,  и, если какой-то функции не будет хватать из-за того, что мы ее упразднили, то ничего не выйдет.

Надеюсь, эта информации была для вас полезна.

Добавить комментарий

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