Креветка: css как переполнение: скрыто для ограничивающих рамок с изображениями - PullRequest
2 голосов
/ 10 февраля 2011

Я хочу обрезать изображение, если оно выходит за рамки ограничивающей рамки. Также как CSS overflow: hidden сделает это. Например.

<code>pdf.grid([0, 0], [3, 27]).bounding_box do
 pdf.image image_file
end

Теперь в настоящее время это изображение будет выходить за пределы ограничивающей рамки, если оно больше, чем оно. Есть ли способ обрезать изображение, когда оно выходит за рамки. ? Я знаю, что это возможно для текста при использовании text_box.

Ответы [ 2 ]

1 голос
/ 13 февраля 2011

Вы можете установить размер изображения или сделать его масштабированным, чтобы оно вписывалось в определенную область при сохранении пропорций, не верьте, что вы можете обрезать изображение.

Если ваша страница не динамическая, то есть область изображения всегда будет одинаковой, это должно быть в порядке.

pdf.image "image_file_path _ & _ name",: position =>: center,: fit => [100,450];

Это основано на v0.8.4.

0 голосов
/ 17 июня 2015

К сожалению, в настоящее время, похоже, не существует надлежащего способа обрезать изображение до ограничительной рамки.Столкнувшись с этой проблемой, я понял эту красоту:

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 была самой последней версией.

...