class HexaPDF::Layout::ImageBox

An Image box object is used for displaying an image.

How an image is displayed inside an image box, depends on whether the width and/or height of the box has been set:

Also see: HexaPDF::Content::Canvas#image

Attributes

image[R]

The image that is shown in the box.

Public Class Methods

new(image, **kwargs) click to toggle source

Creates a new Image box object for the given image argument which needs to be an image object (e.g. returned by HexaPDF::Document::Images#add).

Calls superclass method HexaPDF::Layout::Box::new
# File lib/hexapdf/layout/image_box.rb, line 57
def initialize(image, **kwargs)
  super(**kwargs, &:unused_draw_block)
  @image = image
end

Public Instance Methods

fit(available_width, available_height, _) click to toggle source

Fits the image into the available space.

# File lib/hexapdf/layout/image_box.rb, line 63
def fit(available_width, available_height, _)
  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

  @width <= available_width && @height <= available_height
end

Private Instance Methods

draw_content(canvas, x, y) click to toggle source

Draws the image onto the canvas at position [x, y].

# File lib/hexapdf/layout/image_box.rb, line 91
def draw_content(canvas, x, y)
  canvas.image(@image, at: [x, y], width: content_width, height: content_height)
end