module Prawn::Markup::Processor::Images
Constants
- ALLOWED_IMAGE_TYPES
Public Class Methods
prepended(base)
click to toggle source
# File lib/prawn/markup/processor/images.rb, line 10 def self.prepended(base) base.known_elements.push('img', 'iframe') end
Public Instance Methods
start_iframe()
click to toggle source
# File lib/prawn/markup/processor/images.rb, line 19 def start_iframe placeholder = iframe_placeholder append_text("\n#{placeholder}\n") if placeholder end
start_img()
click to toggle source
# File lib/prawn/markup/processor/images.rb, line 14 def start_img add_current_text add_image_or_placeholder(current_attrs['src']) end
Private Instance Methods
add_image(img)
click to toggle source
# File lib/prawn/markup/processor/images.rb, line 35 def add_image(img) # parse width in the current context img[:width] = SizeConverter.new(pdf.bounds.width).parse(style_properties['width']) pdf.image(img.delete(:image), img) put_bottom_margin(text_margin_bottom) rescue Prawn::Errors::UnsupportedImageType append_text("\n#{invalid_image_placeholder}\n") end
add_image_or_placeholder(src)
click to toggle source
# File lib/prawn/markup/processor/images.rb, line 26 def add_image_or_placeholder(src) img = image_properties(src) if img add_image(img) else append_text("\n#{invalid_image_placeholder}\n") end end
convert_float_to_position(float)
click to toggle source
# File lib/prawn/markup/processor/images.rb, line 77 def convert_float_to_position(float) { nil => nil, 'none' => nil, 'left' => :left, 'right' => :right }[float] end
decode_base64_image(src)
click to toggle source
# File lib/prawn/markup/processor/images.rb, line 64 def decode_base64_image(src) match = src.match(/^data:(.*?);(.*?),(.*)$/) if match && ALLOWED_IMAGE_TYPES.include?(match[1]) StringIO.new(Base64.decode64(match[3])) end end
iframe_placeholder()
click to toggle source
# File lib/prawn/markup/processor/images.rb, line 88 def iframe_placeholder placeholder_value(%i[iframe placeholder], current_attrs['src']) end
image_properties(src)
click to toggle source
# File lib/prawn/markup/processor/images.rb, line 44 def image_properties(src) img = load_image(src) if img props = style_properties { image: img, width: props['width'], position: convert_float_to_position(props['float']) } end end
invalid_image_placeholder()
click to toggle source
# File lib/prawn/markup/processor/images.rb, line 84 def invalid_image_placeholder placeholder_value(%i[image placeholder]) || '[unsupported image]' end
load_image(src)
click to toggle source
# File lib/prawn/markup/processor/images.rb, line 56 def load_image(src) if options[:image] && options[:image][:loader] options[:image][:loader].call(src) else decode_base64_image(src) || load_remote_image(src) end end
load_remote_image(src)
click to toggle source
# File lib/prawn/markup/processor/images.rb, line 71 def load_remote_image(src) if src =~ %r{^https?:/} URI.parse(src).open end end