увеличивать масштаб вдвое и переносить ось в обратном направлении.
15.4.2. Пример документа
Для демонстрации рассмотренной выше техники мы создадим четыре страницы в четырех разных квадрантах. Три из них — слегка измененные варианты демонстрационных программ, включённых в дистрибутив PDF::Writer:
• demo.rb, квадрант 1
• individual-i.rb, квадрант 3
• gettysburg.rb, квадрант 4
Четвертая страница (в квадранте 2) не имеет прямого аналога среди демонстрационных программ, она ближе всего к программе chunkybacon.rb.
Весь код приведен в листинге 15.11, а результат показан на рис. 15.4. Пример довольно длинный, мы подробно обсудим его ниже.
require 'rubygems'
require 'pdf/writer'
def quadrant(pdf, quad)
 raise unless block_given?
 mx = pdf.absolute_x_middle
 my = pdf.absolute_y_middle
 pdf.save_state
 case quad
  when :ul
   pdf.translate_axis 0, my
  when :ur
   pdf.translate_axis mx, my
  when :ll
   nil # no translation needed
  when :lr
   pdf.translate_axis mx, 0
 end
 pdf.scale_axis(0.5, 0.5)
 pdf.у = pdf.page_height
 yield
 pdf.restore_state
end
pdf = PDF::Writer.new
pdf.select_font('Times-Roman',
 rencoding => 'WinAnsiEncoding',
 differences => { 0x01 => 'lozenge' })
mx = pdf.absolute_x_middle
my = pdf.absolute_y_middle
pdf.line(0, my, pdf.page_width, my).stroke
pdf.line(mx, 0, mx, pdf.page_height).stroke
# Левый верхний: Demo (UL).
quadrant(pdf, :ul) do
 x = pdf.absolute_right_margin
 r1 = 25
 40.step(1, -3) do |xw|
  tone = 1.0 - (xw / 40.0) * 0.2
  pdf.stroke_style(PDF::Writer::StrokeStyle.new(xw))
  pdf.stroke_color(Color::RGB.from_fraction(1, tone, tone))
  pdf.line(x, pdf.bottom_margin, x,
   pdf.absolute_top_margin).stroke
  x -= xw+2
 end
 40.step(1, -3) do |xw|
  tone = 1.0 - (xw / 40.0) * 0.2
  pdf.stroke_style(PDF::Writer::StrokeStyle.new(xw))
  pdf.stroke_color(Color::RGB.from_fraction(1, tone, tone))
  pdf.circle_at(pdf.left_margin + 10, pdf.margin_height - 15,
   r1).stroke
  r1 += xw
 end
 pdf.stroke_color(Color::RGB::Black)
 x = pdf.absolute_left_margin
 y = pdf.absolute_bottom_margin
 w = pdf.margin_width
 h = pdf.margin_height
 pdf.rectangle(x, y, w, h).stroke
 text = 'The Ruby Way'
 y = pdf.absolute_top_margin
 50.step(5, -5) do |size|
  height = pdf.font_height(size)
  y -= height
  pdf.add_text(pdf.left_margin + 10, y, text, size)
 end
 (0...360).step(20) do |angle|
  pdf.fill_color(Color::RGB.from_fraction(rand, rand, rand))
  pdf.add_text(300 + Math.cos(PDF::Math.deg2rad(angle)) * 40,
   300 + Math.sin(PDF::Math.deg2rad(angle)) * 40,
   text, 20, angle)

 
                