Class: Zint::Barcode

Inherits:
Object
  • Object
show all
Defined in:
lib/zint/barcode.rb

Overview

Base class to represent the barcode

Examples:

Create new barcode

barcode = Zint::Barcode.new(value: "Test", symbology: Zint::BARCODE_QRCODE, option_1: 1)
barcode.to_file(path: "qr.png")

Defined Under Namespace

Classes: AlreadyGenerated

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(value: nil, input_file: nil, symbology: Zint::BARCODE_CODE128, **kwargs) ⇒ Barcode

Returns a new instance of Barcode.

Parameters:

  • value (String, NilClass) (defaults to: nil)

    Content of the barcode

  • input_file (String, NilClass) (defaults to: nil)

    Path to input file with content of the barcode

  • symbology (Integer) (defaults to: Zint::BARCODE_CODE128)

    Type of barcode

  • kwargs (Hash)

    Specific options for zint symbol (height, scale, …)

Raises:

  • (ArgumentError)


21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/zint/barcode.rb', line 21

def initialize(value: nil, input_file: nil, symbology: Zint::BARCODE_CODE128, **kwargs)
  raise ArgumentError, "value or input_file must be given!" if value&.empty? && input_file&.empty?
  raise ArgumentError, "input_file not found!" if input_file && !File.exist?(input_file)

  @zint_symbol = Native.ZBarcode_Create
  self.symbology = symbology
  kwargs.each do |k, v|
    send("#{k}=", v)
  end

  @value = value
  @input_file = input_file
end

Instance Attribute Details

#input_fileString, NilClass

Returns Path to input file with content of the barcode.

Returns:

  • (String, NilClass)

    Path to input file with content of the barcode



15
16
17
# File 'lib/zint/barcode.rb', line 15

def input_file
  @input_file
end

#valueString, NilClass

Returns Content of the barcode.

Returns:

  • (String, NilClass)

    Content of the barcode



13
14
15
# File 'lib/zint/barcode.rb', line 13

def value
  @value
end

Instance Method Details

#bgcolourObject

Gets background colour of barcode



236
237
238
# File 'lib/zint/barcode.rb', line 236

def bgcolour
  @zint_symbol[:bgcolour].to_s
end

#bgcolour=(bgcolour) ⇒ Object

Sets background as RGB/RGBA hexadecimal string, 6 or 8 characters, NUL-terminated

Parameters:

  • bgcolour (String)

    Background color of barcode



243
244
245
# File 'lib/zint/barcode.rb', line 243

def bgcolour=(bgcolour)
  @zint_symbol[:bgcolour] = bgcolour
end

#bitmap_byte_lengthObject

Gets bitmap byte length of barcode



442
443
444
# File 'lib/zint/barcode.rb', line 442

def bitmap_byte_length
  @zint_symbol[:bitmap_byte_length]
end

#bitmap_heightObject

Gets bitmap height of barcode



437
438
439
# File 'lib/zint/barcode.rb', line 437

def bitmap_height
  @zint_symbol[:bitmap_height]
end

#bitmap_widthObject

Gets bitmap width of barcode



432
433
434
# File 'lib/zint/barcode.rb', line 432

def bitmap_width
  @zint_symbol[:bitmap_width]
end

#border_widthObject

Gets size of border in X-dimensions



200
201
202
# File 'lib/zint/barcode.rb', line 200

def border_width
  @zint_symbol[:border_width]
end

#border_width=(border_width) ⇒ Object

Sets size of border in X-dimensions

Parameters:

  • border_width (Integer)

    Border width of barcode



207
208
209
# File 'lib/zint/barcode.rb', line 207

def border_width=(border_width)
  @zint_symbol[:border_width] = border_width
end

#debugObject

Gets debugging flags



459
460
461
# File 'lib/zint/barcode.rb', line 459

def debug
  @zint_symbol[:debug]
end

#debug=(debug) ⇒ Object

Sets debugging flags

Parameters:

  • debug (Integer)

    Debug level of barcode



466
467
468
# File 'lib/zint/barcode.rb', line 466

def debug=(debug)
  @zint_symbol[:debug] = debug
end

#dot_sizeObject

Gets dot size of barcode



447
448
449
# File 'lib/zint/barcode.rb', line 447

def dot_size
  @zint_symbol[:dot_size]
end

#dot_size=(dot_size) ⇒ Object

Sets size of dots used in BARCODE_DOTTY_MODE

Parameters:

  • dot_size (Float)

    Dot size of barcode



454
455
456
# File 'lib/zint/barcode.rb', line 454

def dot_size=(dot_size)
  @zint_symbol[:dot_size] = dot_size
end

#dpmmObject

Gets resolution of output in dots per mm (BMP/EMF/PCX/PNG/TIF only). Default 0 (none)



340
341
342
# File 'lib/zint/barcode.rb', line 340

def dpmm
  @zint_symbol[:dpmm]
end

#dpmm=(dpmm) ⇒ Object

Sets resolution of output in dots per mm (BMP/EMF/PCX/PNG/TIF only). Default 0 (none)

Parameters:

  • dpmm (Float)

    Resolution of output in dots per mm



347
348
349
# File 'lib/zint/barcode.rb', line 347

def dpmm=(dpmm)
  @zint_symbol[:dpmm] = dpmm
end

#eciObject

Gets ECI of barcode



328
329
330
# File 'lib/zint/barcode.rb', line 328

def eci
  @zint_symbol[:eci]
end

#eci=(eci) ⇒ Object

Sets extended Channel Interpretation. Default 0 (none)

Parameters:

  • eci (Integer)

    ECI of barcode



335
336
337
# File 'lib/zint/barcode.rb', line 335

def eci=(eci)
  @zint_symbol[:eci] = eci
end

#encoded_dataObject

Gets encoded data of barcode



410
411
412
# File 'lib/zint/barcode.rb', line 410

def encoded_data
  @zint_symbol[:encoded_data]
end

#encoded_data=(encoded_data) ⇒ Object

Sets encoded data (output only). Allows for rows of 1144 modules of barcode

Parameters:

  • encoded_data (String)

    Encoded data of barcode



417
418
419
# File 'lib/zint/barcode.rb', line 417

def encoded_data=(encoded_data)
  @zint_symbol[:encoded_data] = encoded_data
end

#errtxtObject

Gets error message in the event that an error occurred



427
428
429
# File 'lib/zint/barcode.rb', line 427

def errtxt
  @zint_symbol[:errtxt].to_s.force_encoding(Encoding::UTF_8)
end

#fgcolourObject

Gets foreground colour of barcode



224
225
226
# File 'lib/zint/barcode.rb', line 224

def fgcolour
  @zint_symbol[:fgcolour].to_s
end

#fgcolour=(fgcolour) ⇒ Object

Sets foreground as RGB/RGBA hexadecimal string, 6 or 8 characters, NUL-terminated

Parameters:

  • fgcolour (String)

    Foreground colour of barcode



231
232
233
# File 'lib/zint/barcode.rb', line 231

def fgcolour=(fgcolour)
  @zint_symbol[:fgcolour] = fgcolour
end

#fontsizeObject

Gets font size of barcode



304
305
306
# File 'lib/zint/barcode.rb', line 304

def fontsize
  @zint_symbol[:fontsize]
end

#fontsize=(fontsize) ⇒ Object

Sets font size of barcode (Unused)

Parameters:

  • fontsize (Integer)

    Font size of barcode



311
312
313
# File 'lib/zint/barcode.rb', line 311

def fontsize=(fontsize)
  @zint_symbol[:fontsize] = fontsize
end

#freeObject

Free barcode and all memory associated with it.

Note: This method is dangerous insofar, that previously exported vectors (by #to_vector ) are no longer usable and any access to them will result in a segfault. It is better to not call this method and leave cleaning up to the garbage collector.



133
134
135
# File 'lib/zint/barcode.rb', line 133

def free
  @zint_symbol.pointer.free
end

#guard_descentObject

Gets height in X-dimensions that EAN/UPC guard bars descend. Default 5



352
353
354
# File 'lib/zint/barcode.rb', line 352

def guard_descent
  @zint_symbol[:guard_descent]
end

#guard_descent=(guard_descent) ⇒ Object

Sets height in X-dimensions that EAN/UPC guard bars descend. Default 5

Parameters:

  • guard_descent (Float)

    Height in X-dimensions that EAN/UPC guard bars descend



359
360
361
# File 'lib/zint/barcode.rb', line 359

def guard_descent=(guard_descent)
  @zint_symbol[:guard_descent] = guard_descent
end

#heightObject

Gets height of barcode



152
153
154
# File 'lib/zint/barcode.rb', line 152

def height
  @zint_symbol[:height]
end

#height=(height) ⇒ Object

Sets height in X-dimensions (ignored for fixed-width barcodes)

Parameters:

  • height (Float)

    Height of barcode



159
160
161
# File 'lib/zint/barcode.rb', line 159

def height=(height)
  @zint_symbol[:height] = height
end

#input_modeObject

Gets input mode of barcode



316
317
318
# File 'lib/zint/barcode.rb', line 316

def input_mode
  @zint_symbol[:input_mode]
end

#input_mode=(input_mode) ⇒ Object

Sets encoding of input data (see DATA_MODE etc below). Default DATA_MODE

Parameters:

  • input_mode (Integer)

    Input mode of barcode



323
324
325
# File 'lib/zint/barcode.rb', line 323

def input_mode=(input_mode)
  @zint_symbol[:input_mode] = input_mode
end

#option_1Object

Gets option 1 of barcode



255
256
257
# File 'lib/zint/barcode.rb', line 255

def option_1
  @zint_symbol[:option_1]
end

#option_1=(option_1) ⇒ Object

Sets option 1 (symbol-specific options (see “../docs/manual.txt”))

Parameters:

  • option_1 (Integer)

    Option 1 of barcode



262
263
264
# File 'lib/zint/barcode.rb', line 262

def option_1=(option_1)
  @zint_symbol[:option_1] = option_1
end

#option_2Object

Gets option 2 of barcode



267
268
269
# File 'lib/zint/barcode.rb', line 267

def option_2
  @zint_symbol[:option_2]
end

#option_2=(option_2) ⇒ Object

Sets option 2 (symbol-specific options) of barcode

Parameters:

  • option_2 (Integer)

    Option 2 of barcode



274
275
276
# File 'lib/zint/barcode.rb', line 274

def option_2=(option_2)
  @zint_symbol[:option_2] = option_2
end

#option_3Object

Gets option 3 of barcode



279
280
281
# File 'lib/zint/barcode.rb', line 279

def option_3
  @zint_symbol[:option_3]
end

#option_3=(option_3) ⇒ Object

Sets option 3 (symbol-specific options) of barcode

Parameters:

  • option_3 (Integer)

    Option 3 of barcode



286
287
288
# File 'lib/zint/barcode.rb', line 286

def option_3=(option_3)
  @zint_symbol[:option_3] = option_3
end

#outfileObject

Contains the name of the file to output a resulting barcode symbol to.

Must end in .png, .gif, .bmp, .emf, .eps, .pcx, .svg, .tif or .txt



250
251
252
# File 'lib/zint/barcode.rb', line 250

def outfile
  @zint_symbol[:outfile].to_s
end

#output_optionsObject

Gets output options of barcode



212
213
214
# File 'lib/zint/barcode.rb', line 212

def output_options
  @zint_symbol[:output_options]
end

#output_options=(output_options) ⇒ Object

Set various output parameters (bind, box etc, see below) of barcode

Parameters:

  • output_options (Integer)

    Output options of barcode



219
220
221
# File 'lib/zint/barcode.rb', line 219

def output_options=(output_options)
  @zint_symbol[:output_options] = output_options
end

#primaryObject

Gets primary message data for more complex symbols



398
399
400
# File 'lib/zint/barcode.rb', line 398

def primary
  @zint_symbol[:primary].to_s
end

#primary=(primary) ⇒ Object

Sets primary message data (MaxiCode, Composite), NUL-terminated of barcode

Parameters:

  • primary (String)

    Primary of barcode



405
406
407
# File 'lib/zint/barcode.rb', line 405

def primary=(primary)
  @zint_symbol[:primary] = primary
end

#row_heightObject

Gets row height of barcode



422
423
424
# File 'lib/zint/barcode.rb', line 422

def row_height
  @zint_symbol[:row_height]
end

#rowsObject

Gets rows of barcode



388
389
390
# File 'lib/zint/barcode.rb', line 388

def rows
  @zint_symbol[:rows]
end

#scaleObject

Gets scale factor of barcode



164
165
166
# File 'lib/zint/barcode.rb', line 164

def scale
  @zint_symbol[:scale]
end

#scale=(scale) ⇒ Object

Sets scale factor when printing barcode

Parameters:

  • scale (Float)

    Scale of barcode



171
172
173
# File 'lib/zint/barcode.rb', line 171

def scale=(scale)
  @zint_symbol[:scale] = scale
end

#show_hrtObject

Gets show_hrt of barcode



291
292
293
# File 'lib/zint/barcode.rb', line 291

def show_hrt
  @zint_symbol[:show_hrt]
end

#show_hrt=(show_hrt) ⇒ Object

Sets show_hrt of barcode show = 1 or hide = 0 Human Readable Text. Default is show (1)

Parameters:

  • show_hrt (Integer)

    show_hrt of barcode



299
300
301
# File 'lib/zint/barcode.rb', line 299

def show_hrt=(show_hrt)
  @zint_symbol[:show_hrt] = show_hrt
end

#structappObject

Gets structured append info. Default structapp.count 0 (none)



364
365
366
# File 'lib/zint/barcode.rb', line 364

def structapp
  @zint_symbol[:structapp]
end

#structapp=(structapp) ⇒ Object

Sets structured append info. Default structapp.count 0 (none)

Parameters:



371
372
373
# File 'lib/zint/barcode.rb', line 371

def structapp=(structapp)
  @zint_symbol[:structapp] = structapp
end

#symbologyObject

Gets type of barcode



140
141
142
# File 'lib/zint/barcode.rb', line 140

def symbology
  @zint_symbol[:symbology]
end

#symbology=(type) ⇒ Object

Sets symbol to use (see BARCODE_XXX below)

Parameters:

  • type (Integer)

    Type of barcode



147
148
149
# File 'lib/zint/barcode.rb', line 147

def symbology=(type)
  @zint_symbol[:symbology] = type
end

#textObject

Human Readable Text, which usually consists of input data plus one more check digit. Uses UTF-8 formatting.



376
377
378
# File 'lib/zint/barcode.rb', line 376

def text
  @zint_symbol[:text].to_s.force_encoding(Encoding::UTF_8)
end

#text=(text) ⇒ Object

Sets Human Readable Text (if any), UTF-8, NUL-terminated (output only) of barcode

Parameters:

  • text (String)

    Text of barcode



383
384
385
# File 'lib/zint/barcode.rb', line 383

def text=(text)
  @zint_symbol[:text] = text
end

#to_bitmap(rotate_angle: 0) ⇒ Zint::Bitmap

Exports barcode to buffer

Parameters:

  • rotate_angle (Integer) (defaults to: 0)

    Rotate angle in degrees (0, 90, 180, 270)

Returns:



96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/zint/barcode.rb', line 96

def to_bitmap(rotate_angle: 0)
  zint_bitmap = to_buffer(rotate_angle: rotate_angle)

  pixels = []
  @zint_symbol[:bitmap_height].times do |row|
    @zint_symbol[:bitmap_width].times do |column|
      pixels << BitmapPixel.new(column, row, zint_bitmap[pixels.size])
    end
  end

  Bitmap.new(@zint_symbol[:bitmap_width], @zint_symbol[:bitmap_height], pixels)
end

#to_buffer(rotate_angle: 0) ⇒ String

Exports barcode to buffer

Parameters:

  • rotate_angle (Integer) (defaults to: 0)

    Rotate angle in degrees (0, 90, 180, 270)

Returns:

  • (String)

    Exported barcode buffer



77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/zint/barcode.rb', line 77

def to_buffer(rotate_angle: 0)
  unless @zint_symbol[:bitmap].null?
    raise AlreadyGenerated, "to_vector was already executed"
  end
  @zint_symbol[:output_options] = Zint::OUT_BUFFER_INTERMEDIATE

  if input_file
    call_function(:ZBarcode_Encode_File_and_Buffer, @zint_symbol, input_file, rotate_angle)
  else
    call_function(:ZBarcode_Encode_and_Buffer, @zint_symbol, value, 0, rotate_angle)
  end

  @zint_symbol[:bitmap].read_bytes((@zint_symbol[:bitmap_width] * @zint_symbol[:bitmap_height]))
end

#to_file(path:, rotate_angle: 0) ⇒ Object

Exports barcode to file

Parameters:

  • path (String)

    Path to export file. Contains the name of the file to output a resulting barcode symbol to. Must end in .png, .gif, .bmp, .emf, .eps, .pcx, .svg, .tif or .txt

  • rotate_angle (Integer) (defaults to: 0)

    Rotate angle in degrees (0, 90, 180, 270)



41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/zint/barcode.rb', line 41

def to_file(path:, rotate_angle: 0)
  unless outfile == 'out.png'
    raise AlreadyGenerated, "to_file was already executed"
  end
  @zint_symbol[:outfile] = path

  if input_file
    call_function(:ZBarcode_Encode_File_and_Print, @zint_symbol, input_file, rotate_angle)
  else
    call_function(:ZBarcode_Encode_and_Print, @zint_symbol, value, 0, rotate_angle)
  end
end

#to_memory_file(extension: ".png", rotate_angle: 0) ⇒ String

Exports barcode to memory file

Parameters:

  • extension (String) (defaults to: ".png")

    Extension exported memory file

  • rotate_angle (Integer) (defaults to: 0)

    Rotate angle in degrees (0, 90, 180, 270)

Returns:

  • (String)

    Exported memory file



59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/zint/barcode.rb', line 59

def to_memory_file(extension: ".png", rotate_angle: 0)
  require "tempfile"
  file = Tempfile.new(["zint", extension])

  to_file(path: file.path, rotate_angle: rotate_angle)

  file.rewind
  buffer = file.read
  file.close
  file.unlink

  buffer
end

#to_vector(rotate_angle: 0) ⇒ Zint::Structs::Vector

Exports barcode as Zint vector

Parameters:

  • rotate_angle (Integer) (defaults to: 0)

    Rotate angle in degrees (0, 90, 180, 270)

Returns:



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/zint/barcode.rb', line 113

def to_vector(rotate_angle: 0)
  unless @zint_symbol[:vector].pointer.null?
    raise AlreadyGenerated, "to_vector was already executed"
  end
  if input_file
    call_function(:ZBarcode_Encode_File_and_Buffer_Vector, @zint_symbol, input_file, rotate_angle)
  else
    call_function(:ZBarcode_Encode_and_Buffer_Vector, @zint_symbol, value, 0, rotate_angle)
  end

  v = @zint_symbol[:vector]
  # Avoid garbage collection of Symbol before Vector, since the Vector is also freed by ZBarcode_Delete()
  v.instance_variable_set(:@symbol, @zint_symbol)
  v
end

#warn_levelObject

Gets warn level of barcode



471
472
473
# File 'lib/zint/barcode.rb', line 471

def warn_level
  @zint_symbol[:warn_level]
end

#warn_level=(warn_level) ⇒ Object

Sets warn level (affects error/warning value returned by Zint API (see WARN_XXX below)) of barcode

Parameters:

  • warn_level (Integer)

    Warn level of barcode



478
479
480
# File 'lib/zint/barcode.rb', line 478

def warn_level=(warn_level)
  @zint_symbol[:warn_level] = warn_level
end

#whitespace_heightObject

Gets height in X-dimensions of whitespace above & below the barcode



188
189
190
# File 'lib/zint/barcode.rb', line 188

def whitespace_height
  @zint_symbol[:whitespace_height]
end

#whitespace_height=(whitespace_height) ⇒ Object

Sets height in X-dimensions of whitespace above & below the barcode

Parameters:

  • whitespace_height (Integer)

    Whitespace height of barcode



195
196
197
# File 'lib/zint/barcode.rb', line 195

def whitespace_height=(whitespace_height)
  @zint_symbol[:whitespace_height] = whitespace_height
end

#whitespace_widthObject

Gets width in X-dimensions of whitespace to left & right of barcode



176
177
178
# File 'lib/zint/barcode.rb', line 176

def whitespace_width
  @zint_symbol[:whitespace_width]
end

#whitespace_width=(whitespace_width) ⇒ Object

Sets width in X-dimensions of whitespace to left & right of barcode

Parameters:

  • whitespace_width (Integer)

    Whitespace width of barcode



183
184
185
# File 'lib/zint/barcode.rb', line 183

def whitespace_width=(whitespace_width)
  @zint_symbol[:whitespace_width] = whitespace_width
end

#widthObject

Gets width of barcode



393
394
395
# File 'lib/zint/barcode.rb', line 393

def width
  @zint_symbol[:width]
end