Module: Prawn::Images
- Included in:
- Document
- Defined in:
- lib/prawn/images.rb,
lib/prawn/images/jpg.rb,
lib/prawn/images/png.rb,
lib/prawn/images/image.rb
Overview
rubocop: disable Style/Documentation
Defined Under Namespace
Stable API collapse
-
#build_image_object(file) ⇒ Object
Builds an info object (Prawn::Images::*) and a PDF reference representing the given image.
-
#embed_image(pdf_obj, info, options) ⇒ Object
Given a PDF image resource ‘pdf_obj` that has been added to the page’s resources and an ‘info` object (the pair returned from #build_image_object), embed the image according to the `options` given.
-
#image(file, options = {}) ⇒ Prawn::Images::Image
Add the image at ‘file` to the current page.
Instance Method Details
#build_image_object(file) ⇒ Object
Builds an info object (Prawn::Images::*) and a PDF reference representing the given image. Return a pair: [pdf_obj, info].
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/prawn/images.rb', line 72 def build_image_object(file) image_content = verify_and_read_image(file) image_sha1 = Digest::SHA1.hexdigest(image_content) # if this image has already been embedded, just reuse it if image_registry[image_sha1] info = image_registry[image_sha1][:info] image_obj = image_registry[image_sha1][:obj] else # Build the image object info = Prawn.image_handler.find(image_content).new(image_content) # Bump PDF version if the image requires it if info.respond_to?(:min_pdf_version) renderer.min_version(info.min_pdf_version) end # Add the image to the PDF and register it in case we see it again. image_obj = info.build_pdf_object(self) image_registry[image_sha1] = { obj: image_obj, info: info } end [image_obj, info] end |
#embed_image(pdf_obj, info, options) ⇒ Object
Given a PDF image resource ‘pdf_obj` that has been added to the page’s resources and an ‘info` object (the pair returned from #build_image_object), embed the image according to the `options` given.
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/prawn/images.rb', line 102 def (pdf_obj, info, ) # find where the image will be placed and how big it will be w, h = info.calc_image_dimensions() if [:at] x, y = map_to_absolute([:at]) else x, y = image_position(w, h, ) move_text_position(h) end # add a reference to the image object to the current page # resource list and give it a label label = "I#{next_image_id}" state.page.xobjects[label] = pdf_obj cm_params = PDF::Core.real_params([w, 0, 0, h, x, y - h]) renderer.add_content("\nq\n#{cm_params} cm\n/#{label} Do\nQ") end |
#image(file, options = {}) ⇒ Prawn::Images::Image
Add the image at ‘file` to the current page. Currently only JPG and PNG files are supported. (Note that processing PNG images with alpha channels can be processor and memory intensive.)
If only one of ‘:width` or `:height` are provided, the image will be scaled proportionally. When both are provided, the image will be stretched to fit the dimensions without maintaining the aspect ratio.
56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/prawn/images.rb', line 56 def image(file, = {}) Prawn.( %i[at position vposition height width scale fit], , ) pdf_obj, info = build_image_object(file) (pdf_obj, info, ) info end |