Генерация 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:

% --BEGIN ENCODER issn-- (Комментарий, говорящий о начале блока кода для ISSN)
% --REQUIRES preamble raiseerror renlinear ean2 ean5 ean13-- (А тут, нам дают понять какие функции будут вызваны для генерации)
% --DESC: ISSN (Описание)
% --EXAM: 0317-8129 00 17 (Пример входных данных)
% --EXOP: includetext guardwhitespace (То что нужно, те самые необходимые параметры)
% --RNDR: renlinear (Ну и механизм для рендеринга, он нам тоже пригодится, дабы определить всевозможные дополнительные параметры)
[...много кода...] (Вначале присутствуют параметры начинающиеся со слеша, это тоже аргументы, которые можно передавать, например, issntextsize - размер шрифта вверху баркода)
% --END ENCODER issn-- (Комментарий, говорящий о завершении блока кода для ISSN)

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

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

%!PS-Adobe-3.0
%%BoundingBox: 0 0 595.28 841.89 % A4 %
%%Creator: NoName
%%EndComments

50 50 moveto (1234-5678 01 12345) (includetext guardwhitespace issntextsize=9 textsize=9 height=0.6 guardwidth=5 guardheight=6 guardrightpos=6 guardrightypos=36.5)
/issn /uk.co.terryburton.bwipp findresource exec

%%EndPage
%%Trailer
showpage
%%EOF

Первые 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) в зависимости от входных данных, что не совсем очевидно,  и, если какой-то функции не будет хватать из-за того, что мы ее упразднили, то ничего не выйдет.

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

Рейтинг
( 1 оценка, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

:) :D :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.