Adding Excel xlsx support and prefixed images
* New sample! * New API function! * Ignoring _img in samplesdev
parent
f778b2f920
commit
0e351754f3
|
|
@ -22,3 +22,4 @@ tmp
|
||||||
*.a
|
*.a
|
||||||
mkmf.log
|
mkmf.log
|
||||||
_img
|
_img
|
||||||
|
samples/_img
|
||||||
34
bin/squib
34
bin/squib
|
|
@ -1,36 +1,2 @@
|
||||||
#!/usr/bin/env ruby
|
#!/usr/bin/env ruby
|
||||||
require 'squib'
|
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'
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
require 'spreadsheet'
|
require 'roo'
|
||||||
|
|
||||||
module Squib
|
module Squib
|
||||||
class Deck
|
class Deck
|
||||||
|
|
@ -7,8 +7,23 @@ module Squib
|
||||||
raise 'Not implemented!'
|
raise 'Not implemented!'
|
||||||
end
|
end
|
||||||
|
|
||||||
def xls(file: 'data.xls', sheet: 0)
|
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
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
module Squib
|
module Squib
|
||||||
class Deck
|
class Deck
|
||||||
|
|
||||||
def save(range: :all, format: :png)
|
def save(range: :all, format: :png, prefix: "card_")
|
||||||
format = [format].flatten
|
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
|
save_pdf if format.include? :pdf
|
||||||
end
|
end
|
||||||
|
|
||||||
def save_png(range: :all)
|
def save_png(range: :all, dir: "_img", prefix: 'card_')
|
||||||
range = rangeify(range)
|
range = rangeify(range)
|
||||||
range.each { |i| @cards[i].save_png(i) }
|
range.each { |i| @cards[i].save_png(i, dir, prefix) }
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
module Squib
|
module Squib
|
||||||
class Card
|
class Card
|
||||||
|
|
||||||
def save_png(i, dir: '_img')
|
def save_png(i, dir, prefix)
|
||||||
cairo_context.target.write_to_png("#{dir}/img_#{i}.png")
|
cairo_context.target.write_to_png("#{dir}/#{prefix}#{i}.png")
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -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
|
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['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'
|
text str: longtext, x: 100, y: 600, font: 'Arial 16'
|
||||||
|
|
||||||
save format: :png
|
save format: :png
|
||||||
|
|
|
||||||
|
|
@ -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!"
|
||||||
Binary file not shown.
|
|
@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
|
||||||
|
|
||||||
spec.add_runtime_dependency 'cairo', '~> 1.12.9'
|
spec.add_runtime_dependency 'cairo', '~> 1.12.9'
|
||||||
spec.add_runtime_dependency 'pango', '~> 2.2.0'
|
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 "bundler", "~> 1.6"
|
||||||
spec.add_development_dependency "rake"
|
spec.add_development_dependency "rake"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue