# File lib/origami/graphics/xobject.rb, line 81 def draw_image(name, attr = {}) load! if @instructions.nil? x, y = attr[:x], attr[:y] @instructions << PDF::Instruction.new('q') @instructions << PDF::Instruction.new('cm', 300, 0, 0, 300, x, y) @instructions << PDF::Instruction.new('Do', name) @instructions << PDF::Instruction.new('Q') end
Draw a straight line from the point at coord from, to the point at coord to.
# File lib/origami/graphics/xobject.rb, line 95 def draw_line(from, to, attr = {}) draw_polygon([from, to], attr) end
Draw a polygon from a array of coordinates.
# File lib/origami/graphics/xobject.rb, line 102 def draw_polygon(coords = [], attr = {}) load! if @instructions.nil? stroke_color = attr[:stroke_color] || DEFAULT_STROKE_COLOR fill_color = attr[:fill_color] || DEFAULT_FILL_COLOR line_cap = attr[:line_cap] || DEFAULT_LINECAP line_join = attr[:line_join] || DEFAULT_LINEJOIN line_width = attr[:line_width] || DEFAULT_LINEWIDTH dash_pattern = attr[:dash] || DEFAULT_DASHPATTERN stroke = attr[:stroke].nil? ? true : attr[:stroke] fill = attr[:fill].nil? ? false : attr[:fill] stroke = true if fill == false and stroke == false set_fill_color(fill_color) if fill set_stroke_color(stroke_color) if stroke set_line_width(line_width) set_line_cap(line_cap) set_line_join(line_join) set_dash_pattern(dash_pattern) if @canvas.gs.text_state.is_in_text_object? @instructions << PDF::Instruction.new('ET').render(@canvas) end unless coords.size < 1 x,y = coords.slice!(0) @instructions << PDF::Instruction.new('m',x,y).render(@canvas) coords.each do |px,py| @instructions << PDF::Instruction.new('l',px,py).render(@canvas) end @instructions << (i = if stroke and not fill PDF::Instruction.new('s') elsif fill and not stroke PDF::Instruction.new('f') elsif fill and stroke PDF::Instruction.new('b') end ) i.render(@canvas) end self end
Draw a rectangle at position (x,y) with defined width and height.
# File lib/origami/graphics/xobject.rb, line 155 def draw_rectangle(x, y, width, height, attr = {}) load! if @instructions.nil? stroke_color = attr[:stroke_color] || DEFAULT_STROKE_COLOR fill_color = attr[:fill_color] || DEFAULT_FILL_COLOR line_cap = attr[:line_cap] || DEFAULT_LINECAP line_join = attr[:line_join] || DEFAULT_LINEJOIN line_width = attr[:line_width] || DEFAULT_LINEWIDTH dash_pattern = attr[:dash] || DEFAULT_DASHPATTERN stroke = attr[:stroke].nil? ? true : attr[:stroke] fill = attr[:fill].nil? ? false : attr[:fill] stroke = true if fill == false and stroke == false set_fill_color(fill_color) if fill set_stroke_color(stroke_color) if stroke set_line_width(line_width) set_line_cap(line_cap) set_line_join(line_join) set_dash_pattern(dash_pattern) if @canvas.gs.text_state.is_in_text_object? @instructions << PDF::Instruction.new('ET').render(@canvas) end @instructions << PDF::Instruction.new('re', x,y,width,height).render(@canvas) @instructions << (i = if stroke and not fill PDF::Instruction.new('S') elsif fill and not stroke PDF::Instruction.new('f') elsif fill and stroke PDF::Instruction.new('B') end ) i.render(@canvas) self end
# File lib/origami/graphics/xobject.rb, line 242 def paint_shading(shade) load! if @instructions.nil? @instructions << PDF::Instruction.new('sh', shade).render(@canvas) self end
# File lib/origami/graphics/xobject.rb, line 54 def render(engine) load! if @instructions.nil? @instructions.each do |instruction| instruction.render(engine) end nil end
# File lib/origami/graphics/xobject.rb, line 379 def set_dash_pattern(pattern) load! if @instructions.nil? unless @canvas.gs.dash_pattern.eql? pattern @instructions << PDF::Instruction.new('d', pattern.array, pattern.phase).render(@canvas) end self end
# File lib/origami/graphics/xobject.rb, line 319 def set_fill_color(color) load! if @instructions.nil? @instructions << ( i = if (color.respond_to? :r and color.respond_to? :g and color.respond_to? :b) or (color.is_a?(::Array) and color.size == 3) r = (color.respond_to?(:r) ? color.r : color[0]).to_f / 255 g = (color.respond_to?(:g) ? color.g : color[1]).to_f / 255 b = (color.respond_to?(:b) ? color.b : color[2]).to_f / 255 PDF::Instruction.new('rg', r, g, b) if @canvas.gs.nonstroking_color != [r,g,b] elsif (color.respond_to? :c and color.respond_to? :m and color.respond_to? :y and color.respond_to? :k) or (color.is_a?(::Array) and color.size == 4) c = (color.respond_to?(:c) ? color.c : color[0]).to_f m = (color.respond_to?(:m) ? color.m : color[1]).to_f y = (color.respond_to?(:y) ? color.y : color[2]).to_f k = (color.respond_to?(:k) ? color.k : color[3]).to_f PDF::Instruction.new('k', c, m, y, k) if @canvas.gs.nonstroking_color != [c,m,y,k] elsif color.respond_to?:g or (0.0..1.0) === color g = color.respond_to?(:g) ? color.g : color PDF::Instruction.new('g', g) if @canvas.gs.nonstroking_color != [ g ] else raise TypeError, "Invalid color : #{color}" end ) i.render(@canvas) if i self end
# File lib/origami/graphics/xobject.rb, line 397 def set_line_cap(cap) load! if @instructions.nil? if @canvas.gs.line_cap != cap @instructions << PDF::Instruction.new('J', cap).render(@canvas) end self end
# File lib/origami/graphics/xobject.rb, line 406 def set_line_join(join) load! if @instructions.nil? if @canvas.gs.line_join != join @instructions << PDF::Instruction.new('j', join).render(@canvas) end self end
# File lib/origami/graphics/xobject.rb, line 388 def set_line_width(width) load! if @instructions.nil? if @canvas.gs.line_width != width @instructions << PDF::Instruction.new('w', width).render(@canvas) end self end
# File lib/origami/graphics/xobject.rb, line 349 def set_stroke_color(color) load! if @instructions.nil? @instructions << ( i = if (color.respond_to? :r and color.respond_to? :g and color.respond_to? :b) or (color.is_a?(::Array) and color.size == 3) r = (color.respond_to?(:r) ? color.r : color[0]).to_f / 255 g = (color.respond_to?(:g) ? color.g : color[1]).to_f / 255 b = (color.respond_to?(:b) ? color.b : color[2]).to_f / 255 PDF::Instruction.new('RG', r, g, b) if @canvas.gs.stroking_color != [r,g,b] elsif (color.respond_to? :c and color.respond_to? :m and color.respond_to? :y and color.respond_to? :k) or (color.is_a?(::Array) and color.size == 4) c = (color.respond_to?(:c) ? color.c : color[0]).to_f m = (color.respond_to?(:m) ? color.m : color[1]).to_f y = (color.respond_to?(:y) ? color.y : color[2]).to_f k = (color.respond_to?(:k) ? color.k : color[3]).to_f PDF::Instruction.new('K', c, m, y, k) if @canvas.gs.stroking_color != [c,m,y,k] elsif color.respond_to?:g or (0.0..1.0) === color g = color.respond_to?(:g) ? color.g : color PDF::Instruction.new('G', g) if @canvas.gs.stroking_color != [ g ] else raise TypeError, "Invalid color : #{color}" end ) i.render(@canvas) if i self end
# File lib/origami/graphics/xobject.rb, line 310 def set_text_char_spacing(char_spacing) load! if @instructions.nil? if char_spacing != @canvas.gs.text_state.char_spacing @instructions << PDF::Instruction.new('Tc', char_spacing).render(@canvas) end self end
# File lib/origami/graphics/xobject.rb, line 249 def set_text_font(fontname, size) load! if @instructions.nil? if fontname != @canvas.gs.text_state.font or size != @canvas.gs.text_state.font_size @instructions << PDF::Instruction.new('Tf', fontname, size).render(@canvas) end self end
# File lib/origami/graphics/xobject.rb, line 265 def set_text_leading(leading) load! if @instructions.nil? if leading != @canvas.gs.text_state.leading @instructions << PDF::Instruction.new('TL', leading).render(@canvas) end self end
# File lib/origami/graphics/xobject.rb, line 258 def set_text_pos(tx,ty) load! if @instructions.nil? @instructions << PDF::Instruction.new('Td', tx, ty).render(@canvas) self end
# File lib/origami/graphics/xobject.rb, line 274 def set_text_rendering(rendering) load! if @instructions.nil? if rendering != @canvas.gs.text_state.rendering_mode @instructions << PDF::Instruction.new('Tr', rendering).render(@canvas) end self end
# File lib/origami/graphics/xobject.rb, line 283 def set_text_rise(rise) load! if @instructions.nil? if rise != @canvas.gs.text_state.text_rise @instructions << PDF::Instruction.new('Ts', rise).render(@canvas) end self end
# File lib/origami/graphics/xobject.rb, line 292 def set_text_scale(scaling) load! if @instructions.nil? if scale != @canvas.gs.text_state.scaling @instructions << PDF::Instruction.new('Tz', scaling).render(@canvas) end self end
# File lib/origami/graphics/xobject.rb, line 301 def set_text_word_spacing(word_spacing) load! if @instructions.nil? if word_spacing != @canvas.gs.text_state.word_spacing @instructions << PDF::Instruction.new('Tw', word_spacing).render(@canvas) end self end
Adds text to the content stream with custom formatting attributes.
text |
Text to write. |
attr |
Formatting attributes. |
# File lib/origami/graphics/xobject.rb, line 203 def write(text, attr = {}) load! if @instructions.nil? x,y = attr[:x], attr[:y] font = attr[:font] || DEFAULT_FONT size = attr[:size] || DEFAULT_SIZE leading = attr[:leading] || DEFAULT_LEADING color = attr[:color] || attr[:fill_color] || DEFAULT_STROKE_COLOR stroke_color = attr[:stroke_color] || DEFAULT_STROKE_COLOR line_width = attr[:line_width] || DEFAULT_LINEWIDTH word_spacing = attr[:word_spacing] char_spacing = attr[:char_spacing] scale = attr[:scale] rise = attr[:rise] rendering = attr[:rendering] @instructions << PDF::Instruction.new('ET').render(@canvas) if (x or y) and @canvas.gs.text_state.is_in_text_object? unless @canvas.gs.text_state.is_in_text_object? @instructions << PDF::Instruction.new('BT').render(@canvas) end set_text_font(font, size) set_text_pos(x, y) if x or y set_text_leading(leading) if leading set_text_rendering(rendering) if rendering set_text_rise(rise) if rise set_text_scale(scale) if scale set_text_word_spacing(word_spacing) if word_spacing set_text_char_spacing(char_spacing) if char_spacing set_fill_color(color) set_stroke_color(stroke_color) set_line_width(line_width) write_text_block(text) self end
Generated with the Darkfish Rdoc Generator 2.