К сожалению, в настоящее время, похоже, не существует надлежащего способа обрезать изображение до ограничительной рамки.Столкнувшись с этой проблемой, я понял эту красоту:
class SamplePdf
include Prawn::View
def initialize
crop_width = 100 # your width here
crop_height = 50 # your height here
image_path = '/path/to/your_image.jpg'
bounding_box [0, 0], width: crop_width, height: crop_height do
pdf_obj, _ = build_image_object(image_path)
x, y = document.send(:image_position, crop_width, crop_height, {})
document.send(:move_text_position, crop_height)
label = "I#{document.send(:next_image_id)}"
document.state.page.xobjects.merge!(label => pdf_obj)
cm_params = PDF::Core.real_params([crop_width, 0, 0, crop_height, x, y - crop_height])
document.renderer.add_content("\nq\n#{cm_params} cm\n/#{label} Do\nQ")
end
end
end
Он в основном адаптирует метод Prawn::Images#image
, но пропускает расчет размеров изображения и масштабирования соответственно.
Это не совсем чистое решение.Пожалуйста, держите меня в курсе, если вы найдете лучший.
Следует иметь в виду, что этот фрагмент использует некоторые детали реализации, которые не являются частью открытого API Prawn и могут измениться в любое время.
На момент написания Prawn 2.0.1 была самой последней версией.