Class: PdfTable

Inherits:
Object
  • Object
show all
Defined in:
lib/majorsilence_pdf/pdf_native.rb

Overview

A table layout handle. Call close when done.

Usage:

table = PdfTable.new(fns, [180, 80, 90, 90])
table.set_header_bg(26, 86, 160)
    .set_alternate_bg(240, 245, 252)
    .set_border(200, 200, 200, 0.5)
    .add_row('Product', 'Qty', 'Unit Price', 'Total')
    .add_row('Widget', '3', '$10.00', '$30.00')
canvas.draw_table(table.handle, 72, 100)
table.close

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(fns, col_widths) ⇒ PdfTable

Returns a new instance of PdfTable.



370
371
372
373
374
375
376
377
378
379
380
381
# File 'lib/majorsilence_pdf/pdf_native.rb', line 370

def initialize(fns, col_widths)
  @fns = fns
  # Pack column widths as a native float array.
  packed = col_widths.map(&:to_f).pack('f*')
  ptr    = Fiddle::Pointer[packed]
  h = fns[:pdf_table_create].call(ptr, col_widths.length)
  raise "pdf_table_create failed: #{PdfLibrary.last_error_str(fns)}" if h.nil? || h.zero?

  @handle = h
  # Keep packed alive so the pointer remains valid during the call.
  @_col_widths_packed = packed
end

Instance Attribute Details

#handleObject (readonly)

Returns the value of attribute handle.



368
369
370
# File 'lib/majorsilence_pdf/pdf_native.rb', line 368

def handle
  @handle
end

Instance Method Details

#add_row(*cells) ⇒ Object

Stage all cells and commit them as a single row.



389
390
391
392
393
394
395
396
397
398
# File 'lib/majorsilence_pdf/pdf_native.rb', line 389

def add_row(*cells)
  cells.each do |cell|
    ret = @fns[:pdf_table_stage_cell].call(@handle, c_str(cell.to_s))
    raise "pdf_table_stage_cell failed: #{PdfLibrary.last_error_str(@fns)}" unless ret.zero?
  end
  ret = @fns[:pdf_table_commit_row].call(@handle)
  raise "pdf_table_commit_row failed: #{PdfLibrary.last_error_str(@fns)}" unless ret.zero?

  self
end

#closeObject



400
401
402
403
404
405
# File 'lib/majorsilence_pdf/pdf_native.rb', line 400

def close
  return unless @handle

  @fns[:pdf_table_close].call(@handle)
  @handle = nil
end

#set_alternate_bg(r, g, b) ⇒ Object



384
# File 'lib/majorsilence_pdf/pdf_native.rb', line 384

def set_alternate_bg(r, g, b)= tap { @fns[:pdf_table_set_alternate_bg].call(@handle, r, g, b) }

#set_border(r, g, b, w) ⇒ Object



385
# File 'lib/majorsilence_pdf/pdf_native.rb', line 385

def set_border(r, g, b, w)   = tap { @fns[:pdf_table_set_border].call(@handle, r, g, b, w.to_f) }

#set_cell_padding(padding) ⇒ Object



386
# File 'lib/majorsilence_pdf/pdf_native.rb', line 386

def set_cell_padding(padding) = tap { @fns[:pdf_table_set_cell_padding].call(@handle, padding.to_f) }

#set_header_bg(r, g, b) ⇒ Object



383
# File 'lib/majorsilence_pdf/pdf_native.rb', line 383

def set_header_bg(r, g, b)   = tap { @fns[:pdf_table_set_header_bg].call(@handle, r, g, b) }