class HexaPDF::Layout::ImageBox
Also see: HexaPDF::Content::Canvas#image
composer.image(machu_picchu)
#>pdf-composer100
* If neither has been set, the image is scaled to fit the available space.
composer.image(machu_picchu, width: 100, height: 30)
#>pdf-composer100
* If both have been set, both are used as is.
composer.image(machu_picchu, height: 40)
composer.image(machu_picchu, width: 40)
#>pdf-composer100
* If one of them has been set, the other is adjusted to retain the image ratio.
of the box has been set:
How an image is displayed inside an image box, depends on whether the width
and/or height
It can either be used directly or through the HexaPDF::Composer#image method.
An Image box object is used for displaying an image.
def draw_content(canvas, x, y)
def draw_content(canvas, x, y) canvas.image(@image, at: [x, y], width: content_width, height: content_height) end
def empty?
def empty? false end
def fit(available_width, available_height, _frame)
Fits the image into the available space, taking the initially set width and height into
def fit(available_width, available_height, _frame) image_width = @image.width.to_f image_height = @image.height.to_f image_ratio = image_width / image_height if @initial_width > 0 && @initial_height > 0 @width = @initial_width @height = @initial_height elsif @initial_width > 0 @width = @initial_width @height = (@width - reserved_width) / image_ratio + reserved_height elsif @initial_height > 0 @height = @initial_height @width = (@height - reserved_height) * image_ratio + reserved_width else rw = reserved_width rh = reserved_height ratio = [(available_width - rw) / image_width, (available_height - rh) / image_height].min @width = image_width * ratio + rw @height = image_height * ratio + rh end @fit_successful = float_compare(@width, available_width) <= 0 && float_compare(@height, available_height) <= 0 end
def initialize(image:, **kwargs)
Creates a new Image box object for the given +image+ argument which needs to be an image
def initialize(image:, **kwargs) super(**kwargs) @image = image end