module Prawn::Graphics::Transparency

The Prawn::Transparency module is used to place transparent content on the page. It has the capacity for separate transparency values for stroked content and all other content.

Example:

# both the fill and stroke will be at 50% opacity
pdf.transparent(0.5) do
  pdf.text("hello world")
  pdf.fill_and_stroke_circle([x, y], 25)
end

# the fill will be at 50% opacity, but the stroke will
# be at 75% opacity
pdf.transparent(0.5, 0.75) do
  pdf.text("hello world")
  pdf.fill_and_stroke_circle([x, y], 25)
end

Public Instance Methods

transparent(opacity, stroke_opacity = opacity) { || ... } click to toggle source

Sets the opacity and stroke_opacity for all the content within the block If stroke_opacity is not provided, then it takes on the same value as opacity

Valid ranges for both paramters are 0.0 to 1.0

Example:

# both the fill and stroke will be at 50% opacity
pdf.transparent(0.5) do
  pdf.text("hello world")
  pdf.fill_and_stroke_circle([x, y], 25)
end

# the fill will be at 50% opacity, but the stroke will
# be at 75% opacity
pdf.transparent(0.5, 0.75) do
  pdf.text("hello world")
  pdf.fill_and_stroke_circle([x, y], 25)
end
# File lib/prawn/graphics/transparency.rb, line 53
def transparent(opacity, stroke_opacity = opacity, &block)
  renderer.min_version(1.4)

  opacity        = [[opacity, 0.0].max, 1.0].min
  stroke_opacity = [[stroke_opacity, 0.0].max, 1.0].min

  save_graphics_state
  renderer.add_content "/#{opacity_dictionary_name(opacity, stroke_opacity)} gs"
  yield
  restore_graphics_state
end

Private Instance Methods

next_opacity_dictionary_id() click to toggle source
# File lib/prawn/graphics/transparency.rb, line 71
def next_opacity_dictionary_id
  opacity_dictionary_registry.length + 1
end
opacity_dictionary_name(opacity, stroke_opacity) click to toggle source
# File lib/prawn/graphics/transparency.rb, line 75
def opacity_dictionary_name(opacity, stroke_opacity)
  key = "#{opacity}_#{stroke_opacity}"

  if opacity_dictionary_registry[key]
    dictionary =  opacity_dictionary_registry[key][:obj]
    dictionary_name =  opacity_dictionary_registry[key][:name]
  else
    dictionary = ref!(
      :Type => :ExtGState,
      :CA   => stroke_opacity,
      :ca   => opacity
    )

    dictionary_name = "Tr#{next_opacity_dictionary_id}"
    opacity_dictionary_registry[key] = { :name => dictionary_name,
                                         :obj  => dictionary }
  end

  page.ext_gstates.merge!(dictionary_name => dictionary)
  dictionary_name
end
opacity_dictionary_registry() click to toggle source
# File lib/prawn/graphics/transparency.rb, line 67
def opacity_dictionary_registry
  @opacity_dictionary_registry ||= {}
end