Difference between revisions of "Generate1DBarcode"
m (1 revision imported) |
|
(No difference)
|
Latest revision as of 07:51, 7 February 2021
Generate1DBarcode (Функции штрихкодов) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Функция генерирует линейный штрихкод указанного типа с указанными размерами, если необходимо. Параметры генерации настраиваются с помощью дополнительных установок, если необходимо. Функция поддерживает следующие виды штрихкодов: Code 128,UPC,EAN,Code 39,ISBN,Code 93,ITF (Interleaved 2 of 5),MSI,Codabar. Результат представляется в виде картинки, которую можно использовать на форме, в электронной таблице, передавать с помощью TCP/IP или сохранять на диск в определенном формате (см. Картинка). Размер создаваемой картинки обычно не имеет большого значения для линейных штрихкодов, однако, если в штрихкоде присутствует текст, чем больше будет размер сгенерированной картинки, тем более гладким при печати будет выглядеть текст. Картинка может генерироваться в двух форматах: реальный цвет (32 бита на точку) и индексированный цвет (8 бит на точку). В первом случае картинка занимает почти в 4 раза больше памяти, при этом, при печати разницы между этим двумя форматами не будет, поэтому, для печатных форм выгоднее использовать индексированный цвет. Штрихкод оперирует понятием ширина модуля или высота модуля. В первом случае, это ширина одного штриха в точках, во втором, высота штриха в точках. Для линейного штрихкода текст обычно печатается совместно с штриховым рисунком и располагается непосредственно под последним, однако, эту опцию можно отключить.
Документация содержит онлайн демонстрацию возможностей функции в статье Генерация штрихкодов.
Синтаксис
Generate1DBarcode(<Тип штрихкода (STRING)>,<Ширина (INT)>,<Высота (INT)>,<Кодируемое сообщение (STRING)>,<Установки (STRING)>):<Результат (PICTURE)>
Аргументы
<Тип штрихкода (STRING)>
- Строка-тип штрихкода, который необходимо сгенерировать. Поддерживаются следующие типы штрихкодов:- Code 128, Code128 -- Самый универсальный линейный штрихкод. Code 128 может содержать строку любого размера, поддерживает латинские буквы разных регистров, цифры, знаки, бинарную информацию.
- EAN -- Стандартный товарный штрихкод, поддерживает только цифры, может использовать формат с 13 цифрами (EAN-13) и с 8-ю цифрами (EAN-8). Последняя цифра кода является контрольной суммой, если предлагаемые для кодирования данные содержат неверную последнюю цифру, будет вызвано исключение.
- Для EAN-13 последняя цифра может быть рассчитана по формуле:
(10-((d2+d4+d6+d8+d10+d12)*3+d1+d3+d5+d7+d9+d11) mod 10) mod 10
, где d? -- цифра кода соответствующей позиции. - Для EAN-8 последняя цифра может быть рассчитана по формуле:
(10-((d1+d3+d5+d7)*3+d2+d4+d6) mod 10) mod 10
, где d? -- цифра кода соответствующей позиции.
- Для EAN-13 последняя цифра может быть рассчитана по формуле:
- UPC -- Стандартный товарный штрихкод США, являющийся совместимым с EAN-13 (EAN-13 является продолжением идеи UPC-A). Поддерживаются только цифры. Может использоваться формат с 2-мя цифрами (UPC-2, дополнение, обычно задающее номер журнала), 5-ю цифрами (UPC-5), 8-ю цифрами (UPC-E) или 12-ю цифрами (UPC-A). Функция также принимает UPC с 13-тью цифрами , когда его первая цифра равна нулю.
- Последняя цифра UPC-A является контрольной и рассчитывается по формуле
(10-((d1+d3+d5+d7+d9+d11)*3+d2+d4+d6+d8+d10) mod 10) mod 10
. - Последняя цифра UPC-5 является контрольной и рассчитывается по формуле
((d1+d3+d5)*3+(d2+d4)*9) mod 10
. - Первая цифра UPC-E должна быть равна 0 или 1.
- Последняя цифра UPC-A является контрольной и рассчитывается по формуле
- ISBN -- Используется для нумерации книг и журналов. Совместим с EAN-13, однако, обычно имеет 10 цифр. Чтобы превратить ISBN в EAN-13, к данным ISBN обычно добавляется три цифры "978" с начала строки. Функция принимает 10-цифорное значение ISBN (при этом последняя контрольная цифра пересчитывается автоматически), либо 13-цифорное значение ISBN, трактующееся как EAN-13.
- Code 39, Code39 -- Является ранним аналогом Code 128, при одинаковых входящих данных, создает более длинный штрихкод по сравнению с Code 128.
- Code 93, Code93 -- Менее известная попытка улучшения Code 39. В данный момент используется крайней редко.
- ITF, ITF-14, Interleaved 2 of 5 -- Штрихкод может быть любой длины, однако, принимает только цифры, при этом количество цифр должно быть четным числом. Преимуществом штрихкода является его компактность (сравнимая, однако, с Code 128) и встроенный механизм контроля корректности.
- MSI -- Устаревший штрихкод любой длины, принимающий только цифры. Может содержать контрольную цифру, способ создания которой может быть разным (см. параметр CD). Созданный штрихкод гораздо менее компактен, чем ITF или Code 128.
- Codabar, CodeABar -- Устаревший штрихкод любой длины, принимающий только цифры и символы
-$:/.+ABCD
. Штрихкод должен начинаться и заканчиваться на один из символовABCDEN*T
. Содержит механизм контроля корректности, поэтому не нуждается в контрольной цифре.
<Ширина (INT)>,<Высота (INT)>
- (возможен аргумент-переменная (ByRef)) Ширина и высота картинки результата, в зависимости от этих параметров, функция работает в одном из режимов:- <Ширина>,<Высота> являются переменными и <Ширина> инициализирована нулем. В этом случае, функция вернет в указанных переменных минимальную ширину и высоту картинки, требуемой для генерации штрихкода, при этом сама функция не возвратит картинку. Этот режим используется для определения высоты и ширины с тем, чтобы использовать эти данные перед генерацией.
- Если аргумент <Ширина> меньше нуля (к примеру, -1), функция произведет генерацию картинки в необходимой пропорции, с учетом коэффициента увеличения (SCALE) и вернет результат, как картинку.
- Если аргументы <Ширина> и <Высота> больше нуля, они задают ширину и соответственно высоту результирующей картинки, при этом функция постарается разместить штрихкод в центральной части картинки. Высота картинки будет определять высоту штрихов, так как высота штриха для линейных штрихкодов может варьироваться в определенном диапазоне, однако высоту текста изменить уже сложнее. Если места на картинке с заданными размерами недостаточно, функция вызовет исключение.
<Кодируемое сообщение (STRING)>
- Кодируемое сообщение должно представлять собой строку (ANSI или UTF-16) и может содержать только цифры или цифры, буквы и знаки, в зависимости от типа генерируемого штрихкода.<Установки (STRING)>
- (необязательный аргумент) Строка представляет собой набор дополнительных параметров, используемых для генерации штрихкода. Параметры записываются один за другим, разделенные запятыми. Каждый из параметром должен быть записан в виде<Имя параметра>:<Значение параметра>
(к примеру,SCALE:3
). Ниже дана таблица возможных параметров с описанием.
Параметр | Описание |
---|---|
T:+ (по умолчанию), T:- | Параметр задает режим печати текста под генерируемым штрихкодом (T:+), либо запрещает генерацию текста (T:-). |
F:<Имя шрифта>[|<Размер шрифта>[|<Свойства шрифта>[|<Цвет шрифта>]]] | Параметр задает шрифт для генерации текста. По умолчанию используется значение Consolas|||0 . См. также статью Формат записи шрифтов в системе.
|
BC:<Цвет бумаги> | Используется для задания цвета заднего фона, на котором генерируется штрихкод. Цвет задается в шестнадцатеричной 24-битной нотации. По умолчанию BC:FFFFFF -- белый цвет.
|
LC:<Цвет штриха> | Используется для задания цвета штрихов. Цвет задается в шестнадцатеричной 24-битной нотации. По умолчанию LC:000000 -- черный цвет.
|
BR:<Ширина пустого окружения штрихкода (бордюра)> | Ширина задается в точках (не модулях). По умолчанию зависит от типа штрихкода. |
BRU:<Ширина верхнего отступа (бордюра)> | Ширина задается в точках (не модулях). По умолчанию зависит от типа штрихкода. |
BRD:<Ширина нижнего отступа (бордюра)> | Ширина задается в точках (не модулях). По умолчанию зависит от типа штрихкода. |
BRL:<Ширина левого отступа (бордюра)> | Ширина задается в точках (не модулях). По умолчанию зависит от типа штрихкода. |
BRR:<Ширина правого отступа (бордюра)> | Ширина задается в точках (не модулях). По умолчанию зависит от типа штрихкода. |
BRT:<Ширина зазора между штрихами и текстом> | Ширина задается в точках (не модулях). Разрешено использование отрицательной ширины. По умолчанию составляет две ширины модуля. |
SCALE:<Коэффициент масштабирования> | Безразмерный коэффициент на который будут умножены все размеры (ширина и высота модуля, размер шрифта, размеры бордюров и пр.) при генерации штрихкода. По умолчанию равен единице. К примеру, если этот коэффициент будет равен двум, генерируемая картинка будет в два раза больше. |
QZ:<Размер зоны тишины> | "Зона тишины" это дополнительный бордюр следующий по горизонтали перед штрихами штрихкода и после них. Стандарты некоторых штрихкодов требуют присутствия подобной зоны для корректного считывания. Зона задается в ширинах модуля (не в точках) и по умолчанию составляет 10 модулей. |
BH:<Высота модуля> | Задает высоту модуля в точках. По умолчанию эта величина рассчитывается из размеров картинки (если таковые заданы) или ширины модуля по формулам, являющимся стандартными для каждого из штрихкодов. |
BHP:<Высота модуля в процентах> | Задает высоту модуля в процентах от ширины среднего кодированного символа (не одного модуля). Для разных типов штрихкодов один символ может быть кодирован разным количеством модулей. К примеру, при числе 100 высота модуля будет соответствовать ширине одного символа. Не имеет смысла использовать этот параметр одновременно с BH. |
NH:<Высота меток EAN> | Задает высоту удлинения начальных, конечных и средних штрихов в штрихкодах типа EAN. Высота задается в процентах и высоты текста и имеет значение 25 по умолчанию. Данная высота является декоративной и не влияет на читаемость штрихкода. |
BPP:<Битов на точку> | Задает режим создаваемой картинки. Может использоваться 2 значения: 8 (индексируемый цвет), 32 (реальный цвет). 8 бит на точку используется по умолчанию, так как позволяет сократить потребность в памяти в 4 раза при создании картинки. При печати картинки разницы между 8-битным и 32-битным цветом не будет, однако, при сохранении картинки на диск или использовании для внешних источников, выбор формата определяется возможностями декодирования картинки внешним источником. |
WEW:<Ширина широкого модуля> | Задает ширину широких модулей для штрихкодов типа Code 39, ITF и Codabar, которые наряду с узкими модулями используют также широкие. Обычно эта ширина равна 2 узким модулям, однако стандарты разрешают использовать число 3 или даже больше. |
CD:<Тип контрольной цифры MSI> | Задает способ подсчета контрольной цифры в штрихкоде MSI. Могут использоваться следующие значения: 0 -- не добавлять контрольную цифру перед выводом, 10 (по умолчанию) -- контрольная цифра рассчитывается способом mod 10 , 11 -- контрольная цифра рассчитывается способом mod 11
|
Возвращаемое значение
В зависимости способа вызова функции, она возвращает либо объект, типа картинка, либо пустое значение
Примеры
Генерация EAN-13
//Пример генерирует EAN-13 и сохраняет его на диск в файл C:\file.png аК:=Generate1DBarcode("EAN",-1,-1,"4601248015571","SCALE:5,BRT:-2,NH:50,F:Tahoma,BPP:32,BRU:2"); аК.Save("c:\file.png","png");
Генерация UPC-A с дополнительным UPC-2
//Пример генерирует UPC-A с дополнительным UPC-2, располагающимся справа от него // Затем сохраняет результат на диск в файл C:\file.png //Штрихкод взят с сайта http://www.barcodeisland.com/upcext.phtml СтрПар:="SCALE:5,BRT:-2,NH:50,F:Tahoma,BPP:32,BRU:2,BHP:200"; //Генерация штрихкодов аК:=Generate1DBarcode("UPC",-1,-1,"042100005264",СтрПар); аК2:=Generate1DBarcode("UPC",-1,-1,"12",СтрПар); //Создание большой картинки и добавление на нее сгенерированных ранее штрихкодов aPic:=Picture.Create(аК.Width+аК2.Width+5,Max(аК.Height,аК2.Height),toRGB(255,255,255),32); aPic.DrawPicture(аК,0,0,аК.Width,аК.Height); aPic.DrawPicture(аК2,аК.Width+5,0,аК2.Width,аК2.Height); //Сохранение результата aPic.Save("c:\file.png","png");
Генерация Code 128
//Пример генерирует Code 128 с текстом "Code 128" и сохраняет его на диск в файл C:\file.png аК:=Generate1DBarcode("Code 128",-1,-1,"Code 128","SCALE:5,BRT:-1,F:Tahoma,BPP:32,BRU:2"); аК.Save("c:\file.png","png");
Сравнение картинок Code 128, Code 39, Code 93, ITF, MSI и Codabar на примере генерации числа
//Пример генерирует число 1234567890 для 6 разных типов штрихкодов, при этом // для штрихкода типа Codabar по спецификации добавляются начальный и конечный знак (+2 знака), // что делает сравнение не совсем честным (однако, требование отобразить "1234567890" выполняется). СтрПар:="SCALE:5,T:-,BRU:2"; aList:=List.Create("ITF","Code 128","Code 93","MSI","Codabar","Code 39"); bList:=List.Create(); Шир:=0; Выс:=0; //Подсчет требуемой высоты и ширины общей картинки, генерация картинок в цикле For i:=1 To aList.Size() Do If aList.Get(i)="Codabar" Then аК:=Generate1DBarcode(aList.Get(i),-1,-1,"*1234567890*",СтрПар); Else аК:=Generate1DBarcode(aList.Get(i),-1,-1,"1234567890",СтрПар); EndIf; bList.Add(аК); Шир:=Max(Шир,аК.Width); Выс:=Выс+аК.Height+10; EndDo; //Нахождение высоты текстовой строки ВысТ:=Picture.TextHeight("Code 128","Tahoma|14|B"); //Создание большой картинки и добавление на нее сгенерированных ранее штрихкодов aPic:=Picture.Create(Шир,Выс+ВысТ*aList.Size(),toRGB(255,255,255),32); ВысТек:=0; For i:=1 To aList.Size() Do аК:=bList.Get(i); aPic.DrawPicture(аК,0,ВысТек,аК.Width,аК.Height); aPic.Text(0,ВысТек+аК.Height,aList.Get(i),"Tahoma|14|B"); ВысТек:=ВысТек+аК.Height+ВысТ+10; EndDo; //Сохранение результата aPic.Save("c:\file.png","png");