Zint Barcode Studio Changelog

What's new in Zint Barcode Studio 2.13.0

Dec 19, 2023
  • Buffer lengths of members `fgcolour` and `bgcolour` in `zint_symbol` extended 10 -> 16 to allow for "C,M,Y,K" comma-separated decimal percentage strings
  • CMYK values for EPS (slightly) and TIF (significantly) have changed - now use the same RGB -> CMYK formula
  • Text (HRT) placement for vector (EMF/EPS/SVG) output changed - for EAN/UPC slightly further away from barcode, for all others slightly nearer. Some horizontal alignments of EAN/UPC vector text also tweaked
  • Text (HRT) for standalone EAN-2 and EAN-5 now at top of symbol (was at bottom)
  • Text height (font size) for SMALL_TEXT vector output reduced
  • For Windows, filenames are now assumed to be UTF-8 encoded. Affects `outfile` in `zint_symbol` and all API filename arguments
  • Never-used `fontsize` member removed from `zint_symbol`
  • Buffer length of member `text` (HRT) in `zint_symbol` extended 128 -> 200 (client buffers may need checking/extending)
  • Font of text of SVG vector output now "OCRB, monospace" (EAN/UPC) or "Arimo, Arial, sans-serif" (all others) (was "Helvetica, sans-serif" for both)
  • Unintended excess horizontal whitespace of Composite symbols removed, and quiet zone settings respected exactly, and centring of HRT (if any) now relative to linear part of symbol only rather than whole symbol
  • Unlikely-to-be-used `bitmap_byte_length` member removed from `zint_symbol` (was only set on BMP output to length of BMP pixel array)
  • EXCODE39 now defaults to displaying check digit in Human Readable Text (HRT)
  • GS1_128 now warns if data > 48 (GS1 General Specifications max)

New in Zint Barcode Studio 2.12.0 (Dec 19, 2022)

  • Incompatible changes:
  • DOTCODE, QRCODE, RMQR: now return warning if ECI or Structured Append used in GS1 mode
  • CLI now returns an error if unknown option given or if option is missing its argument
  • NOTE: previously printed error messages but continued without returning anerror
  • DPD now adds top boundary bar by default and returns warnings if input is not compliant
  • Legacy and never-used output option BARCODE_NO_ASCII removed (value now use by new output option BARCODE_BIND_TOP)
  • Symbology BARCODE_CODE128B (Suppress subset C) renamed to BARCODE_CODE128AB to more accurately reflect its behaviour (old name still recognised, except inTcl backend)
  • Symbology BARCODE_MAILMARK renamed to BARCODE_MAILMARK_4S due to introduction of BARCODE_MAILMARK_2D (old name still recognised, except in Tcl backend)
  • CLI now expects floating point arguments to be in simple decimal point notation (i.e. not scientific notation) with a maximum of 7 significant digits
  • Changes:
  • bwipp_dump.ps: convert patch file to cat file as BWIPP now honours `dontdraw` for composite symbologies
  • DOTCODE, QRCODE, RMQR: return warning if ECI or Structured Append used in GS1 mode, ticket #271
  • CLI: improve `getopt_long_only()` processing, printing own message if bad ar and returning error if so rather than continuing to process
  • manual: MSE typo -> MSI; adjust SVG scaling for PDF manual; pandoc 2.19.2
  • manual/man page/GUI: Code 16k -> Code 16K
  • PDF417/MICROPDF417: add optimized encoding, FAST_MODE for previous; formatting changes
  • common.c/h: add `cnt_digits()`; comments in include; minor fiddling
  • API/CLI/Tcl/GUI: new output option BARCODE_BIND_TOP / `--bindtop` / "Bind Top"
  • DPD: add top boundary (width 3X) by default, using new BARCODE_BIND_TOP; "relabel" option; some compliance checks
  • manual: fuller DPD doc; some spelling typos, formatting
  • cmake: fixes for static build and install directories, props koprok
  • cmake: remove zintconfig.h.in for now as incompatible with MSVC project builds (will add back in future if go fully CMake)
  • NO_PNG -> ZINT_NO_PNG and new API function `Zint_NoPng()` to determine if no
  • PNG support in libzint; replace use in GUI with backend_qt method `noPng()`
  • API: add new zint_symbol `dpmm` field for output resolution (BMP/EMF/PCX/PNG/ TIF only, i.e. excluding EPS, GIF & SVG)
  • Add support for specifying scale by X-dimension and resolution with new option `--scalexdimdp` for CLI/Tcl & new API function `ZBarcode_Scale_From_XdimDp()` (plus `ZBarcode_XdimDp_From_Scale()` and `ZBarcode_Default_Xdim()`) and new GUI popup; manual: document
  • BMP/EMF/PCX/PNG/TIF: use new `dpmm` resolution field (for EMF following Inkscape)
  • backend_qt: add `dpmm()`, `vectorWidth()`, `vectorHeight()`, `noPng()`, `getVersion()`, `takesGS1AIData()`, & `XdimDp` stuff incl. new `QZintXdimDp` struct for passing around scale vars & use in `getAsCLI()`; add comments
  • Raise `scale` limit to 200 (from 100) to allow for large dpmm
  • output: create directories & subdirectories as necessary for output path using new function `out_fopen()` and use in BMP/EMF/EPS/GIF/PCX/PNG/SVG/TIF
  • DPLEIT/DPIDENT: format HRT according to (incomplete) documentation, and set default height to 72X (from 50X)
  • CODE128B renamed to CODE128AB as can use subsets A and/or B
  • MAILMARK: better error message if input < 14 characters
  • GUI: add "Default" button for DAFT tracker ratio & enable/disable various default buttons; use new `takesGS1AIData()` to enable/disable GS1-specific checkboxes
  • CLI: use new `validate_float()` to parse float options (7 significant digits allowed only, no scientific notation)
  • CLI: mirror: use -o directory if any (ticket #193)
  • QRCODE/UPNQR: add FAST_MODE (try 4 not 8 masks automatically)
  • GS1: add new AI 7011 (GSCN 22-163)
  • Add new symbology BARCODE_MAILMARK_2D (Royal Mail 2D Mailmark), renaming previous BARCODE_MAILMARK (Royal Mail 4-State Mailmark) to BARCODE_MAILMARK_4S
  • Add new symbology BARCODE_UPU_S10
  • PZN: allow check digit to be given; add space after hyphen in HRT; PZN7 option
  • backend_tcl: update TEA
  • DATAMATRIX/GRIDMATRIX/PDF417/QR/ULTRA: micro-optimize structapp ID parse
  • library/CLI: fiddle with static asserts (make CHAR_BIT sensitive, supposedly)
  • win32/README: update building libpng (assembly removed)
  • README.linux: document incompatibility of Qt6 >= 6.3
  • manual: expand Barcode Studio waffle
  • test suite: change range separator to hyphen and allow multiple excludes
  • Bugs:
  • test suite: fix `test_library` test to allow for running from root; fix `test_args` test to allow for re-running (remove junk) (tickets #268, #269)
  • common.h: define ZINT_IS_C89 as __STDC_VERSION__ not defined by MSVC, and use when checking whether to include <alloca.h> (MR #152)
  • common.c: ensure `stripf()` not inlined to prevent optimizer undoing effect (ticket #269)
  • GUI: fix "Border Width" ampersand shortcut
  • CODE128: allow for extended latching (double FNC4) spanning intermediate CodeC sequence by setting `f_state` only if in CodeA/B & checking before adding extended mode switch (cf OkapiBarcode commit [9ce6dcc], props Daniel Gredler)
  • DATAMATRIX: in FAST_MODE re-process any buffered X12 characters when mode changes from X12 (cf OkapiBarcode commit [fb7981e], props Daniel Gredler)
  • CODABLOCKF: allow for FNC4 when estimating no. of rows required
  • CODE16K: make sure row calculation accurate by dispensing with glyph estimate & using actual codeword count
  • CODE16K: ensure initial mode selection allows for extended characters
  • vector.c: add `z_alloca()` cast for `first_row_rects` (ticket #272)
  • MSVC project files: remove incorrect "CompileAsCpp" setting from libzint project files (ticket #272)
  • bwipp_dump.ps: fix 2/4-track processing; update to latest BWIPP
  • PDF417/MICROPDF417: use latch not ps shift for padding when spanning Text segments to avoid affecting 1st char of 2nd segment
  • GUI: only skip encoded/errored signal processing if active modal ExportDialog (wasn't clearing/setting error text bar correctly)
  • CODABAR: fix minimum height calc
  • EMF: fix indexing of handles (zero-based not 1-based)
  • GUI: fix symbology zap (previous technique of clearing and re-loading settings without doing a sync no longer works); fix UPCEAN guard descent enable

New in Zint Barcode Studio 2.11.1 (Aug 26, 2022)

  • Changes:
  • GUI: sequence export dialog: add Postfix field for filename
  • Eci.c: replace libiconv-adapted code with own implementations so as to fully comply with libzint's BSD license
  • GUI: CODE39/EXCODE39: show/hide HIBC check digit option
  • RMQR: update to ISO/IEC 23941:2022 - R13x77 numeric cclens change 8 -> 7
  • QRCODE: use stricter interpretation of ZINT_FULL_MULTIBYTE, excluding certain trailing bytes
  • GUI: foreground/background colours -> text boxes and icon buttons, add swap button, independently movable picker (NULL parent), preview colour changes, preview Data Window changes, add clear data (del) buttons, add zap button and Factory Reset menu option, various other fixes
  • GUI: export window: add no. of sequences to results label
  • Frontend: batch: for @ use + instead of * on Windows as * not allowed in filenames
  • Add new symbology BC412 (SEMI T1-95)
  • Backend: use alloca() (z_alloca()) for both Unix and Windows
  • GS1: new AI 4309 with latlong checker, new currency code 925
  • GUI: add automatic info feedback to "Automatic" combo item of size/row/height comboboxes
  • PDF417: encodation now simpler and closer to ISO/IEC 15438:2015 Annex N algorithm, props Jeff Skaistis
  • Add new symbology CEPNet
  • Bugs:
  • Frontend/test_args.c: don't use WIFEXITED(), WEXITSTATUS() on Windows
  • Libzint: fix some confusing error messages introduced by segment stuff
  • GUI: remove unnecessary tabMain min size (better layout rendering on Windows/Fedora)
  • Library: check symbol->primary for escape sequences also
  • GUI: error message GS1_MODE -> GS1 mode
  • GUI: sequence window: fix initial clear button status
  • GUI: NO_PNG: allow for Qt not parsing #if's in slots
  • Frontend: batch mode: fix default "~~~~~" output (github issue #65)
  • Vector: ensure separators don't overlap with other rectangles so that they render correctly when have RGBA alpha channel
  • GUI: update_preview() after Data Dialog return to ensure preview in sync
  • PDF417: fix invalid numeric -> byte shift transitions, MR #151, props Jeff Skaistis
  • PDF417: fix extraneous text latch after a byte shift, MR #151, props Jeff Skaistis

New in Zint Barcode Studio 2.11.0 (Jun 7, 2022)

  • Incompatible changes:
  • Add width to struct zint_vector_circle
  • NOTE: backward incompatible drawing of MaxiCode finder (bullseye)
  • Check that scale/height/whitespace/border are reasonable values
  • NOTE: will return error if values outside ranges
  • raster.c: Bug fix for heap-buffer-overflow (#204 ARM-Cortex)
  • NOTE: may cause single-pixel changes to height depending on height/scale used
  • JAPANPOST: return error if input data would be truncated
  • NOTE: previously was silently truncated
  • PDF417: return warning if specified cols increased
  • NOTE: previously no warning was returned
  • Matrix symbols: horizontal boundary bars appear outside any vertical whitespace
  • NOTE: previously appeared inside vertical whitespace
  • ECI 29 now GB 2312 only; GB 18030 is new ECI 32
  • NOTE: previously ECI 29 was GB 18030 for HANXIN, GB 2312 otherwise HANXIN, QRCODE/RMQR now warn when convert to GB 18030, Shift JIS resp. and no ECI given
  • GRIDMATRIX no longer attempts Latin-1 conversion when no ECI given
  • CLI now returns ZINT_ERROR_INVALID_OPTION (8) on its failed option checks and ZINT_WARN_INVALID_OPTION (2) on ignored options
  • NOTE: previously returned 1 and 0 respectively
  • Changes:
  • RMQR: add ECI support
  • CODE93: don't display check characters in HRT (as per standard Figure B1)unless option_2 = 1 or vers=1
  • GUI: separate out MAXICODE Structured Carrier Message fields
  • library.c: Check that scale/height/whitespace/border are reasonable values: scale (0.01-100), height (0-2000), whitespace_width/height (0-100), border_width (0-100)
  • CLI: allow both e.g. '-height' and '--height' (getopt_long_only())
  • UPC/EAN: add guard_descent
  • Add output_options BARCODE_QUIET_ZONES and BARCODE_NO_QUIET_ZONES
  • Allow dummy AI "[]" if GS1NOCHECK_MODE and has data (#204)
  • raster.c: improve non-half-integer interpolation performance
  • Add Structured Append support for AZTEC, CODEONE, DATAMATRIX, DOTCODE,
  • GRIDMATRIX, MAXICODE, MICROPDF417, PDF417, QRCODE, ULTRA
  • ULTRA: add revision 2 support (based on BWIPP 2021-09-28 update)
  • Add compliant height
  • GUI: add Menu, copy to clipboard EMF/GIF/PNG/TIF, errtxt bar and status bar, icons (feathericons)
  • CODABAR: add show check digit option
  • DAFT: max chars 50 -> 100
  • CMake: separate no-optimize from ZINT_DEBUG into new ZINT_NOOPT option
  • PDF417: add specify rows option
  • Add HEIGHTPERROW_MODE input mode flag
  • DBAR_EXPSTK: add max rows option
  • CODE16K/CODE49: add min rows option
  • GUI: add CLI equivalent dialog (#163)
  • Add ZBarcode_BarcodeName()
  • GUI: data dialog: convert Line Feeds if escaping on input, escape on output
  • DATAMATRIX: new algorithm for (near-)optimal encoding, props Alex Geller
  • CLI/GUI/Tcl: add --fast option to select faster but less optimal DATAMATRIX algorithm (previous default)
  • Matrix symbols: change horizontal boundary bars to appear outside any vertical whitespace, as they're decorative rather than functional (#247)
  • FIM: Add support for FIM E
  • Updated ECIs to AIM ITS/04-023:2022 (ECI Part 3: Register)
  • HANXIN: removed alternating filler in function information
  • GRIDMATRIX/HANXIN/QRCODE/RMQR: warn if auto-conversion (i.e. no ECI given) occurs to resp. specialized char sets (GB 2312/GB 18030/Shift JIS)
  • Add multiple segments support for AZTEC, CODEONE, DATAMATRIX, DOTCODE, GRIDMATRIX, HANXIN, MAXICODE, MICROPDF417, PDF417, QRCODE, RMQR, ULTRA
  • MICROQR: check versions M1 and M2 for allowed characters so as to give better error messages
  • UPNQR: allow mask to be manually specified
  • GUI: use non-native QColorDialog on Unix also; no noEXE for CLI equivalent;
  • add shortcuts for copy-to-clipboard and CLI equivalent
  • CLI: new --version option to print Zint version
  • manual: one true source now manual.pmd from which manual.txt is generated
  • CLI: man page moved from frontend/zint.1.gz to docs/zint.1.gz, now generated from docs/zint.1.pmd
  • add README.linux to root dir
  • CLI: return ZINT_ERROR_INVALID_OPTION instead of 1 on bad option and ZINT_WARN_INVALID_OPTION instead of 0 on ignored option
  • Bugs:
  • GUI/CLI: fix dev version test
  • library.c: error_tag(): check error_number < ZINT_ERROR on WARN_FAIL_ALL
  • vector.c: enforce minimum scale >= 0.1 and allow in GUI
  • Suppress some pedantic warnings, props codemonkey82 (#204)
  • gs1.c: Allow 0-length AI data if GS1NOCHECK_MODE, props codemonkey82 (#204)
  • raster.c: avoid distributive multiplication with floats to lessen chances of platform variation (#204 ARM-Cortex crash)
  • common/emf/output/raster/vector.c: use new stripf() func to workaround float variations
  • raster.c: Don't add height offset for text if scale < 1.0 (as won't print)
  • ISBNX: fix not returning error number (warning) correctly
  • rc: fix VER_FILEVERSION_STR format (, -> .), props Jeff Skaistis
  • PDF417: fix cols/rows calculation to require multiple <= 928 codewords
  • raster.c: fix possible blank rows appearing in CODE16K, CODE49, PHARMA_TWO, PDF417 & CODABLOCKF due to height/scale rounding, props codemonkey82 (#204)
  • library.c: check for stacking symbols >= 200
  • DATAMATRIX: fix mis-encoding of non-encodables in X12 and EDIFACT modes,
  • props Alex Geller
  • DATAMATRIX: fix mis-encoding of FNC1/GS in EDIFACT in GS1 mode
  • Allow for dot overspill in height of vertical box sides (dotty mode)
  • HANXIN: fix gate-posts on codeword limits
  • GUI: cater for HiDPI display, props bitaround (#257)
  • RMQR: fix ECI encoding (wrong bit length for indicator)
  • CLI/tcl: fix version check (need <= 999 for DAFT permille)
  • UPNQR: fix required binary mode using mode_preset
  • GRIDMATRIX: default char set is GB 2312 only, not Latin-1 with GB 2312 alt
  • HANXIN/QRCODE: use Hanzi/Kanji modes when compatible ECIs given

New in Zint Barcode Studio 2.10.0 (Aug 15, 2021)

  • Incompatible changes:
  • Add halign (horizontal align) to struct zint_vector_string
  • NOTE: backward incompatible text drawing for UPC/EAN
  • Change height and row_height array to floats
  • NOTE: may cause changes in heights
  • Changes:
  • Move project history/version from manual.txt and backend/README into this file
  • Command line switches -d or -i for code data may now be at any position.
  • Add rotation for vector formats
  • Change double to float for performance in many internal places
  • Ticket 197: optimize raster scaling for 0.5 substeps; ignore raster scaling < 0.5 as pixels lost.
  • Ticket 197: add output option to bypass time-intensive buffer_plot() (OUT_BUFFER_INTERMEDIATE)
  • Reduce BMP size by using 1 bit per pixel (except Ultracode)
  • New warn_level field, WARN_FAIL_ALL
  • Add GS1NOCHECK_MODE to input_mode (note was ZPL compatibility modeWARN_ZPL_COMPAT to warn_level)
  • Remove version info from zint.h and put in zintconfig.h via zintconfig.h.in
  • Add ZBarcode_Cap()
  • Add GUI symbology filter, separate settings for each symbology
  • Require cmake 3.5, use PNG::PNG and add Qt6 build option
  • Make library fully stack-based so reentrant apart from file operations
  • Performance improvements (large data) for AZTEC/HANXIN/GRIDMATRIX/PDF417/QR
  • Option scmvv for MaxiCode #212; postcode needn't be space-filled
  • eci: Add support for all ECIs (Big5, Korean, UCS-2BE)
  • CLI: Handle UTF-8 args on Windows; -b <barcode name>
  • DATAMATRIX: make EOD encodation strictly ISO 16022 compliant
  • png.c: Use palette for file size savings
  • tif.c: Use palette/bilevel/LZW to reduce file size, alpha/CMYK support
  • Option gs1parens (GS1PARENS_MODE)
  • MAXICODE: Rejig raster output to more closely match ISO 16023:2000
  • C25STANDARD/C25INTER/C25IATA/C25LOGIC/C25IND: add check digit option (#216)
  • Use zint-64.svg for smoother icons, props frhun
  • Add whitespace_height to zint_symbol (vertical whitespace)
  • AZTEC: optimize populate_map (good for small data) - avoids MSVC bug also
  • Various workarounds for other MSVC bugs
  • CMake: Windows compatible, backend/tests & frontend/tests now subprojects using new zint_add_test.cmake file, static build, new ZINT_USE_PNG andZINT_USE_QT options, getopt moved to subproject and getopt detection, sanitizer flag detection, and many other improvements, props Alonso Schaich
  • PLESSEY: add options NCR weighted mod-10, hide check digit(s) in HRT
  • Fuller error messages; more comments zint.h
  • CMake: simplication and modernization, Qt5/6 version, props Null Void (atom)
  • POSTNET/PLANET: allow up to 38 chars (ZINT_WARN_NONCOMPLIANT) (see [d7ac9c])
  • RMQR: update to new draft ISO/IEC JTC1/SC31N000 (Draft 2019-6-24)
  • ULTRA: update max size and min cols based on BWIPP 2021-07-14 update
  • Bugs:
  • Code16k selects GS1 mode by default in GUI
  • Ultracode: use white pixels instead background for white modules.
  • EMF: fix Ultracode colours.
  • Ultracode: fix count of codewords when using reader init mode
  • Databar Limited: add 5 right guard spaces (ISO/IEC 24723:2010 6.2 (e))
  • Data Matrix: avoid unnecessary latch in X12 mode at end of data, #208
  • Data Matrix: fix eod shift -> 0 pad
  • POSTNET/PLANET: remove extra 1 module space
  • Aztec: fix bit-stuffing (again!) and Aztec Rune: fix for data >= 128
  • EAN composite: allow for check digit + buffer overflow for too long add-on
  • Han Xin fix 0xFFE terminator
  • GUI: Use UTF-8 for QSettings (non-ASCII was getting garbled on restore)
  • DOTCODE: Fix best_mask -> high_score prime test
  • CODEONE: various fixes, ECI support
  • 218 Prevent buffer overflow in ean_leading_zeroes by checking max lengths
  • MAXICODE: fix mask typos for ECI 3/4 bytes
  • Fix UPCEAN small font ignored/disabled (introduced [1adba1])
  • get_best_eci: check UTF-8 before returning 26
  • MAXICODE: fix shifting from sets C/D/E to A/B (only latch available)
  • EAN14, NVE18: fix checksum calc for zero-filled input
  • png: ULTRA: allow for fgcolour if bind/box (MR #111)
  • DOTCODE: allow for max 200 cols in CLI, GUI, Tcl
  • CODEONE/DATAMATRIX/MAILMARK/PLESSEY: fix some 32-bit/portability bugs
  • CODABAR: fix CALCIUM define address use, props Alonso Schaich
  • DATAMATRIX/CODEONE: Use LCM in look ahead tests to avoid floats (#228)
  • raster/output: use new isfintf() to test floats integral (CodeQL)
  • ZBarcode_Encode: don't reinit symbol->outfile, props Alonso Schaich
  • CODEONE: is_last_single_ascii() out-of-bounds, #232 CI-Fuzz, props Jan Schrewe
  • library: compat symbology 39 fix; ISBN: "X" check
  • backend/CMakeLists.txt: output dir for zintconfig.h, props Andre Maute (#238)
  • UPCE/UPCE_CC: allow check digit (same as UPCA/UPCA_CC) so selecting composite doesn't give error
  • bmp/emf/ps.c: allow for foreground colour in ULTRA
  • bmp/gif/pcx.c: allow for BARCODE_STDOUT (fflush/fclose)
  • ps.c: fix buffer overflow on colour_to_pscolor() CMYK
  • composite: fix buffer overflow for large linear and small composite
  • composite: clear errtxt when bumping from CC-A -> CC-B -> CC-C
  • CODABLOCKF: prevent cols > 62; fix pTestList buffer overflow
  • RMQR: allow for righthand vertical timing pattern in populate_grid()

New in Zint Barcode Studio 2.6.7 (Oct 7, 2019)

  • Changes:
  • Ticket 127: Allow to code ECI 3 if explicitly given for debug purposes.
  • Incompatible change**
  • "--eci 3" now leads to included ECI information.
  • "--eci 0" may now be used to not include any ECI information.
  • The default of the parameter changed from 3 to 0.
  • Fixed bugs:
  • Ticket 146, 165: fix wrong encoding of RSS composite codes

New in Zint Barcode Studio 2.6.4 (Sep 2, 2019)

  • Fixed bugs: EMF output, maxicode plot/content
  • Datamatrix DMRE updated to the ISO/IEC29158 version. This is incompatible in the way,
  • that the old -vers numbers for DMRE are re-assigned.
  • The separator of GS1-datamatrix may be switched from FNC1 to GS.
  • GS1 field length check AI 8009 and 7230 to 7239 currected.

New in Zint Barcode Studio 2.4.3.0 (Jul 13, 2013)

  • Correct ISBN13 check digit
  • ISBN-13 check digit now correctly identifies '0'.