Browse Source

Adding Excel xlsx support and prefixed images

* New sample!
* New API function!
* Ignoring _img in samples
dev
Andy Meneely 12 years ago
parent
commit
0e351754f3
  1. 3
      .gitignore
  2. 34
      bin/squib
  3. 25
      lib/squib/api/data.rb
  4. 8
      lib/squib/api/save.rb
  5. 4
      lib/squib/graphics/save_images.rb
  6. 2
      samples/basic.rb
  7. 16
      samples/excel.rb
  8. BIN
      samples/sample.xlsx
  9. 1
      squib.gemspec

3
.gitignore vendored

@ -21,4 +21,5 @@ tmp
*.o
*.a
mkmf.log
_img
_img
samples/_img

34
bin/squib

@ -1,36 +1,2 @@
#!/usr/bin/env ruby
require 'squib'
require 'cairo'
red = [1.0, 0.0, 0.0, 1]
white = [1.0,1.0,1.0, 1]
surface = Cairo::ImageSurface.new(825,1125)
cr = Cairo::Context.new(surface)
#Set white background
cr.set_source_rgba(*white)
cr.paint
#Write some text
cr.set_source_rgba(*red)
cr.select_font_face ("Helvetica");
cr.set_font_size(36)
cr.move_to(150,150)
cr.show_text('Hello, World!')
#Put our own image here
if File.exists? 'test.png'
png = Cairo::ImageSurface.from_png('test.png')
cr.set_source(png, 0, 300)
cr.paint
end
#Save!
cr.target.write_to_png("test.png")
puts "Done!"
#font type: 'Rockwell'
#set_font type: 'Rockwell'
#set_font type: 'Rockwell'

25
lib/squib/api/data.rb

@ -1,4 +1,4 @@
require 'spreadsheet'
require 'roo'
module Squib
class Deck
@ -7,8 +7,23 @@ module Squib
raise 'Not implemented!'
end
def xls(file: 'data.xls', sheet: 0)
end
def xlsx(file: 'deck.xlsx', sheet: 0)
s = Roo::Excelx.new(file)
s.default_sheet = s.sheets.first
data = {}
s.first_column.upto(s.last_column) do |col|
header = s.cell(s.first_row,col).to_s
data[header] = []
(s.first_row+1).upto(s.last_row) do |row|
cell = s.cell(row,col)
# Roo hack for avoiding unnecessary .0's on whole integers
cell = s.excelx_value(row,col) if s.excelx_type(row,col) == [:numeric_or_formula, "General"]
data[header] << cell
end#row
end#col
data
end#xlsx
end
end
end

8
lib/squib/api/save.rb

@ -1,15 +1,15 @@
module Squib
class Deck
def save(range: :all, format: :png)
def save(range: :all, format: :png, prefix: "card_")
format = [format].flatten
save_png(range: range) if format.include? :png
save_png(range: range, prefix: prefix) if format.include? :png
save_pdf if format.include? :pdf
end
def save_png(range: :all)
def save_png(range: :all, dir: "_img", prefix: 'card_')
range = rangeify(range)
range.each { |i| @cards[i].save_png(i) }
range.each { |i| @cards[i].save_png(i, dir, prefix) }
end
end

4
lib/squib/graphics/save_images.rb

@ -1,8 +1,8 @@
module Squib
class Card
def save_png(i, dir: '_img')
cairo_context.target.write_to_png("#{dir}/img_#{i}.png")
def save_png(i, dir, prefix)
cairo_context.target.write_to_png("#{dir}/#{prefix}#{i}.png")
end
end

2
samples/basic.rb

@ -11,7 +11,7 @@ Squib::Deck.new(width: 825, height: 1125, cards: 3) do
rect x: 30, y: 30, width: 150, height: 150, x_radius: 25, y_radius: 25
text str: data['name'], x: 250, y: 55, font: 'Arial 54'
text str: data['level'], x: 65, y: 65, font: 'Arial 72'
text str: data['level'], x: 75, y: 50, font: 'Arial 72'
text str: longtext, x: 100, y: 600, font: 'Arial 16'
save format: :png

16
samples/excel.rb

@ -0,0 +1,16 @@
#!/usr/bin/env ruby
require 'squib'
Squib::Deck.new(width: 825, height: 1125, cards: 3) do
background color: [1.0,1.0,1.0]
data = xlsx file: 'sample.xlsx', sheet: 0
text str: data['Name'], x: 250, y: 55, font: 'Arial 54'
text str: data['Level'], x: 65, y: 65, font: 'Arial 72'
text str: data['Description'], x: 65, y: 600, font: 'Arial 36'
save format: :png, prefix: 'sample_excel_'
end
puts "Done!"

BIN
samples/sample.xlsx

Binary file not shown.

1
squib.gemspec

@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
spec.add_runtime_dependency 'cairo', '~> 1.12.9'
spec.add_runtime_dependency 'pango', '~> 2.2.0'
spec.add_runtime_dependency 'roo', '~> 1.13.2'
spec.add_development_dependency "bundler", "~> 1.6"
spec.add_development_dependency "rake"

Loading…
Cancel
Save