Класс для API ZINT «Barcode Generator»
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Игорь Столяров
- Ветеран движения
- Сообщения: 7948
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 92 раза
Класс для API ZINT «Barcode Generator»
Библиотека для создания практически любых штрих-кодов.
В примере показан вывод штрих-кодов в окно и отчёт.
(Перекрестная ссылка на альтернативу viewtopic.php?p=40124#p40124) добавил Admin
В примере показан вывод штрих-кодов в окно и отчёт.
(Перекрестная ссылка на альтернативу viewtopic.php?p=40124#p40124) добавил Admin
- Вложения
-
- zint-2025-04-20.zip
- Версия: 20.04.2025 г.
- (509.49 КБ) 280 скачиваний
Последний раз редактировалось Игорь Столяров 20 Апрель 2025, 19:40, всего редактировалось 16 раз.
Make Clarion Great Again ! 
- Игорь Столяров
- Ветеран движения
- Сообщения: 7948
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 92 раза
ZINT BarCode для Clarion
Небольшая доработка класса для управления т.н. "тихой зоной" для разгона сканера и / или
установки отступа кода от края картинки / рамки.
Нужно учитывать, что разные коды работают по разному. Например DATA MATRIX (используемый
в системе маркировки) практически не требует зоны распознования и поэтому удобен для компактного размещения.
В некоторых кодах "тихая зона" сразу включена по умолчанию и её можно наоборот отключать.
Вообще нужно смотреть какие параметры коды принимают, и собственно, выполняют. Например:
Также в классе немного изменена структура методов и устранено старое ограничение, когда для
печати разных видов кодов требовалась полная реинициализация объекта ZINT. Теперь мона всё !
установки отступа кода от края картинки / рамки.
Нужно учитывать, что разные коды работают по разному. Например DATA MATRIX (используемый
в системе маркировки) практически не требует зоны распознования и поэтому удобен для компактного размещения.
В некоторых кодах "тихая зона" сразу включена по умолчанию и её можно наоборот отключать.
Вообще нужно смотреть какие параметры коды принимают, и собственно, выполняют. Например:
Код: Выделить всё
Loc:MyZint.Setting(MySymbol) ! Печать штрих-кода в отчёте
Loc:MyZint.Setting.sColor = Color:Red ! Пусь штрих-код будет красненьким
Loc:MyZint.Setting.sBorderWidth = 2 ! Добавили рамку вокруг кода, удобно для контроля
If MySymbol = ZINT_BARCODE_AZTEC ! Для этого кода нет "тихой зоны" -> делаем сами
Loc:MyZint.Setting.sWSpaceWidth = 2 ! - Отступ по ширине
Loc:MyZint.Setting.sWSpaceHeight = 2 ! - Отступ по высоте
else
Loc:MyZint.Setting.sQuietZone = True ! Включить "тихую зону" для уверенного распознования кода сканером
end
Loc:MyZint.PrintNewReport(?Image, Tovar.SCod, Report)
печати разных видов кодов требовалась полная реинициализация объекта ZINT. Теперь мона всё !

Make Clarion Great Again ! 
- Игорь Столяров
- Ветеран движения
- Сообщения: 7948
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 92 раза
ZINT BarCode для Clarion
В первом сообщении добавил обновление класса ZINT BarCode для библиотеки ZINT версии 2.13.0
Список изменений: https://sourceforge.net/projects/zint/f ... nt/2.13.0/
Список изменений: https://sourceforge.net/projects/zint/f ... nt/2.13.0/
Make Clarion Great Again ! 
- Игорь Столяров
- Ветеран движения
- Сообщения: 7948
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 92 раза
Класс для API ZINT «Barcode Generator»
Привет всем !
Вышло долгожданное обновление библиотеки ZINT 2.14.0 ... но с засадой.
Теперь комплект идёт с TCL файлами и предлагается самостоятельно (как-то) из них собрать Win x32 DLL.
Вопрос: кто-нибудь в теме как мона трансформировать TCL DLL -> Win x32 DLL ?
Заранее спасибо за помощь.
Комплект в папке _ZInt на FTP или по ссылке: https://sourceforge.net/projects/zint/
Вышло долгожданное обновление библиотеки ZINT 2.14.0 ... но с засадой.
Теперь комплект идёт с TCL файлами и предлагается самостоятельно (как-то) из них собрать Win x32 DLL.

Вопрос: кто-нибудь в теме как мона трансформировать TCL DLL -> Win x32 DLL ?
Заранее спасибо за помощь.
Комплект в папке _ZInt на FTP или по ссылке: https://sourceforge.net/projects/zint/
Make Clarion Great Again ! 
- Игорь Столяров
- Ветеран движения
- Сообщения: 7948
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 92 раза
Класс для API ZINT «Barcode Generator»
В первом сообщении добавил обновление класса ZINT BarCode для библиотеки ZINT версии 2.15.0.9
Впервые самостоятельно собрана DLL Win x32 с поддержкой нативной записи штрих-кода в PNG (мною впервые !)
Опубликую полный список изменений здесь, т.к. судя по всему, проект сменил команду и там сейчас
небольшой бардак (+ "настоящие программеры" из GNU считают разработчков под Win32 вторым сортом):
Впервые самостоятельно собрана DLL Win x32 с поддержкой нативной записи штрих-кода в PNG (мною впервые !)
Опубликую полный список изменений здесь, т.к. судя по всему, проект сменил команду и там сейчас
небольшой бардак (+ "настоящие программеры" из GNU считают разработчков под Win32 вторым сортом):
Код: Выделить всё
Version 2.15.0.9 (dev) not released yet (2025-04-16)
====================================================
**Incompatible changes**
------------------------
- Buffer length of member `errtxt` in `zint_symbol` extended 100 -> 160
(client buffers may need checking/extending)
- New `raw_segs` & `raw_seg_count` fields in `zint_symbol` for use with new
output option `BARCODE_RAW_TEXT`
- Symbol structure members `option_1`, `option_2` and `option_3` now updated
after `ZBarcode_Encode()` and variants are called, and there are three new
methods in the Qt Backend to access to them
- New Qt Backend method `isBindable()` for new flag `ZINT_CAP_BINDABLE`
- GS1 Composites now return warning if CC type upped from requested due to size
of composite data
- EAN-8 with add-on now returns warning that it's non-standard
- UPC-E now returns warning if first digit of 7 digits ignored (not '0' or '1')
Changes
-------
- Add new `BARCODE_RAW_TEXT` option for `output_options` which sets new fields
`raw_segs` and `raw_seg_count` with encoded data
- Add API funcs `ZBarcode_UTF8_To_ECI()` and `ZBarcode_Dest_Len_ECI()`
- Set `option_1`, `option_2`, `option_3` to values used in encodation, and add
new access methods `encodedOption1()` etc. to Qt Backend, and use in GUI to
provide better feedback
- AZTEC: give more precise warnings in low ECC situations, and indicate via
`option_1` by setting to -1 (min 3 words), 0 (<5% + 3 words)
- Better warning messages on non-compliant heights
- composite: warn if CC type upped from requested
- gs1: csumalpha: improve warning, report both chars (ticket #332, props Harald
Oehlmann)
- New `ZBarcode_Cap()` flag `ZINT_CAP_BINDABLE`, differentiated from
`ZINT_CAP_STACKABLE`, and new Qt Backend method `isBindable()`
- DOTCODE: now pads rows if given number of columns instead of failing if rows
below min (5)
- EAN-8 + add-on: warn as non-compliant
- UPC-E: warn if first digit of 7 (or 8 if check digit given) not '0' or '1'
- Extend `errtxt` buffer 100 -> 160
- Add new symbologies `BARCODE_EAN8`, `BARCODE_EAN_2ADDON`,
`BARCODE_EAN_5ADDON`, `BARCODE_EAN13`, `BARCODE_EAN8_CC` and
`BARCODE_EAN13_CC` as replacements for `BARCODE_EANX`, `BARCODE_EANX_CHK` and
`BARCODE_EANX_CC` and use in CLI/GUI (`BARCODE_EANX` etc. marked as legacy)
- For EAN/UPC accept space as alternative add-on separator to '+', and accept
GTIN-13 format with & without 2-digit or 5-digit add-on (no separator)
Bugs
----
- CODABLOCKF: fix misencodation of extended ASCII 0xB0-0xB9 when followed by
digit (ignore 2nd byte of FNC4 when categorizing Code C characters)
- AZTEC: fix GS1 mode with Structured Append (wasn't outputting initial FNC1)
- set_height: fix non-compliance false positives by using epsilon in checks
- UPU_S10: fix Service Indicator warning re "H" (ticket #331, props Milton Neal)
- CLI: fix `separator` check to use new `ZINT_CAP_BINDABLE` instead of
`ZINT_CAP_STACKABLE`
- ZBarcode_Cap: add missing symbologies to `ZINT_CAP_BINDABLE` (was
`ZINT_CAP_STACKABLE`)
- MAILMARK_2D: fix postcode validation: no limited alphanumerics, spaced-out
DPS "outward"-only allowed, all-blank DPS allowed (ticket #334, props Milton
Neal)
- manual/man page: fix DATAMATRIX Sizes tables "28 12x26" -> "27 12x26"
Version 2.15.0 (2025-02-25)
===========================
***2.14.0 regression fix***
---------------------------
- CODE128: start code no longer omitted for data starting with numerics followed
by extended ASCII (Latin-1)
**Incompatible changes**
------------------------
- New `text_length` field in `zint_symbol`
Changes
-------
- iso4217: remove 191 (HRK), 694 (SLL), 931 (CUC); add 926 (VED)
- Add `text_length` (length of `text`) to `zint_symbol`
- PLESSEY: add show default check characters option
Bugs
----
- CODE128: fix 2.14.0 regression (see above), never start in mode C1
- CODE32: ignore `option_2` (check digit options)
- PZN: ignore `option_2` (check digit options) except for indicates PZN7 only
- DPD: exclude DEL from ident tag also
- out_maybe_mkdir: fix `utf8_to_wide()` return (Windows only)
- man page: fix Code 93 `--vers=1` hide -> show default check digits
Version 2.14.0 (2025-02-05)
===========================
**Incompatible changes**
------------------------
- New `memfile` & `memfile_size` fields in `zint_symbol` for use with new output
option `BARCODE_MEMORY_FILE`
- Buffer length of member `text` (HRT) in `zint_symbol` extended 200 -> 256
(client buffers may need checking/extending)
- Invalid `input_mode` now returns warning
- Aztec Code symbols that due to input length & user-requested version have less
than recommended 5% error correction codewords now return warning
- New CODE128-only special extra escapes beginning `\^`
- Add-ons for UPC-A and UPC-E now descend to be level with the main symbol guard
bars, and the righthand outside digit is now placed 1X less from main symbol
to avoid touching any add-on
- GS1-128 symbols now warn if READER_INIT option used
Changes
-------
- BMP: lessen heap memory usage by only `malloc()`ing a row
- GIF: lessen heap memory usage by paging; use standard colour char map
- Add `BARCODE_MEMORY_FILE` to `symbol->output_options` to allow outputting to
in-memory buffer `symbol->memfile` instead of to file `symbol->outfile`,
ticket #301
- CODE16K (was for CODE128): improve encodation on A/B shifting, props Daniel
Gredler (Okapi)
- CODE128: add new extra escape `\^1` for manual insertion of FNC1s, ticket
#324, props Jim Shank;
new extra escapes `\^A`, `\^B`, `\^C` and `\^@` for manual switching of
Code Sets;
add minimal encodation algorithm, props Alex Geller (ZXing) and Bue Jensen
(BWIPP);
- library: return warning on invalid `input_mode` reset
- library/CLI: expanded error messages
- GS1: new AIs 7250-7259 (GSCN 22-246);
iso4217: new ISO 4217 currency code 924;
new AIs 7041 (GSCN 23-272) (packagetype) and 716 (GSCN-24-157)
- AZTEC: workaround MSVC 2022 optimizer bug in `az_populate_map()` loops,
ticket #317, props Andre Maute;
return warning if ECC < 5% (due to bit-stuffing when version given)
- MAXICODE: zero-pad US postcodes that lack "+4" (Annex B.1.4a), from
OkapiBarcode, props Daniel Gredler;
add minimal encodation algorithm, props Bue Jensen (BWIPP)
- GUI: use X11 (xcb) as platform instead of Wayland on Linux to avoid various
weird behaviours;
in "grpDATF.ui" use "PlainText" rather than "RichText" for tracker ratio
examples as height of text messing up sometimes
- UPCA/UPCE: descend add-ons to same level as guards and adjust righthand
outside digit to be 4X/2X instead of 5X/3X away from main symbol so as not to
touch add-on TODO: revisit when standard clarified
- manual: make explicit that AI "(00)" and "(01)" prefixes added by Zint are
HRT-only; clarify Codablock-F length maximum & add examples
- add DXFILMEDGE (MR #159, props Antoine Mérino)
Bugs
----
- raster/BMP/GIF/PCX/TIF: fix dealing with very large data (use `size_t`)
- raster: add `raster_malloc()` to fail > 1GB (avoids very large output files;
also lessens to some degree chances of being victim of OOM killer on Linux)
- GUI: printing scale dialog: set maxima on X-dim and resolution to keep scale
<= 200
- BMP/EMF/PCX/TIF: fix endianness on big-endian machines (note TIF now always
written as little-endian - simplifies testing)
- ITF14/DPLEIT/DPIDENT: ignore `option_2` (check digit options)
- GUI: scalewindow: fix cropping of initial resolution and bound X-dim <= 10
- GUI: factory reset: reset preview background colour also
- GUI: cliwindow: `#if _WIN32` -> `#ifdef _WIN32`
- QZint: fix legacy width and security level getters/setters, MR #158, props
Philip Ye
- CODE128: fix extended char latching when exactly 3 extended chars at end
- library: need to check for valid UTF-8 after de-escaping
- MAXICODE: maintain current set between segments
- MSYS2: fix stdout output on Windows under MSYS2 (mailing list, props Frank)
- DATAMATRIX: fix mis-encodation by only doing special end-of-data processing
on last segment
Make Clarion Great Again ! 
- morkovin
- Ветеран
- Сообщения: 930
- Зарегистрирован: 20 Июль 2005, 14:53
- Откуда: Volgograd, Russia
- Благодарил (а): 9 раз
- Поблагодарили: 3 раза
- Контактная информация:
Класс для API ZINT «Barcode Generator»
Посмотрел пример, но не понял, как сохранить сгенерированный QR-код (image) в файл с нужным мне именем и расширением?
WBR, morkovin
- Игорь Столяров
- Ветеран движения
- Сообщения: 7948
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 92 раза
Класс для API ZINT «Barcode Generator»
Здесь ответ делится на 2 части ...morkovin писал(а): 21 Апрель 2025, 9:48 как сохранить сгенерированный QR-код (image) в файл с нужным мне именем и расширением

1. Библиотека ZINT имеет проблемы с некоторыми русскими именами файлов.
Поэтому мы предпочитаем формировать картинки со штрих-кодами в папке TEMP Windows.
Т.е. Вы можете указать нужный Вам формат (по умолчанию GIF) и забрать картинку из TEMP:
Код: Выделить всё
Loc:MyZint.Setting(ZINT_BARCODE_QRCODE) ! Создаём QR код
Loc:MyZint.FileExt = 'png'
If Loc:MyZint.WriteToFile('https://forum.clarionlife.net') = 0 then Message(Loc:MyZINT.FileName).
Обновите пожалуйста файлы INC / CLW прикреплённые к этому сообщению. Теперь можно вот так:
Код: Выделить всё
Loc:MyZint.Setting(ZINT_BARCODE_QRCODE) ! Создаём QR код
Loc:MyZint.Setting.sOutFile = 'D:\TestZint.png'
If Loc:MyZint.WriteToFile('https://forum.clarionlife.net') = 0 then Message(Loc:MyZINT.FileName).
3. Но предупреждаю, что Вы получите ошибку, если зададите какой-нибудь кандибобер вроде:
Код: Выделить всё
Loc:MyZint.Setting(ZINT_BARCODE_QRCODE) ! Создаём QR код
Loc:MyZint.Setting.sOutFile = 'D:\СБИС++\TestZint.png'
If Loc:MyZint.WriteToFile('https://forum.clarionlife.net') = 0 then Message(Loc:MyZINT.FileName).
- Вложения
-
- zint-21-04-2025.zip
- (18.38 КБ) 118 скачиваний
Make Clarion Great Again ! 
- morkovin
- Ветеран
- Сообщения: 930
- Зарегистрирован: 20 Июль 2005, 14:53
- Откуда: Volgograd, Russia
- Благодарил (а): 9 раз
- Поблагодарили: 3 раза
- Контактная информация:
Класс для API ZINT «Barcode Generator»
Спасибо! Этот вариант полностью устраивает. Имена файлов у меня - это GUID студента, далее файл считывается LL-репортером в QR image для печати на титульном листе диплома (вот ведь придумали!Игорь Столяров писал(а): 21 Апрель 2025, 13:17 2. С другой стороны - а почему собственно нет ? (если Вы понимаете, что хотите сделать).
Обновите пожалуйста файлы INC / CLW прикреплённые к этому сообщению. Теперь можно вот так:
КОД: ВЫДЕЛИТЬ ВСЁ
Loc:MyZint.Setting(ZINT_BARCODE_QRCODE) ! Создаём QR код
Loc:MyZint.Setting.sOutFile = 'D:\TestZint.png'
If Loc:MyZint.WriteToFile('https://forum.clarionlife.net') = 0 then Message(Loc:MyZINT.FileName).

P.S. Использую ZINT через командную строку, но думаю перейти на Ваш вариант.
WBR, morkovin
- morkovin
- Ветеран
- Сообщения: 930
- Зарегистрирован: 20 Июль 2005, 14:53
- Откуда: Volgograd, Russia
- Благодарил (а): 9 раз
- Поблагодарили: 3 раза
- Контактная информация:
Класс для API ZINT «Barcode Generator»
Переменная
В zint.inc нашёл строку:
Изменил на
Работает. Будут какие-либо негативные последствия?
слишком короткая (всего 40 символов)Loc:MyZint.Setting.sOutFile =
В zint.inc нашёл строку:
Код: Выделить всё
ZINT_xTypeQImage Queue,Type
iFile CString(40) ! GUID(36) & '.' & EXT(3)
end
Код: Выделить всё
ZINT_xTypeQImage Queue,Type
iFile CString(200) ! GUID(36) & '.' & EXT(3)
end
WBR, morkovin
- Игорь Столяров
- Ветеран движения
- Сообщения: 7948
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 92 раза
Класс для API ZINT «Barcode Generator»
Неть. Я внёс указанные Вами изменения, но мне также нужно будет добавить
очистку файлов с прямым указанием имени в Destruct.
Поэтому Вам лучше сразу включать опцию:
Код: Выделить всё
Loc:MyZint.NoDelFile = True ! Не удалять файл с штрих-кодом при деактивации класса
If Loc:MyZint.WriteToFile( ...
Эту тему уже неоднократно поднимали с CURL.
У меня штатный Защитник Win10 x64 постоянно нервно реагирует на запуск внешнего EXE из приложения.
Make Clarion Great Again ! 