Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
После переноса оси (то есть сдвига начала координат) мы можем изменить масштаб вдоль оси. Чтобы получить четыре квадранта, следует уменьшить вдвое масштаб по осям X и Y (
pdf.scale_axis 0.5, 0.5(0, 0)(90, 90)(0, 0)(45, 45)(90, 90)(135, 135)Затем мы отдаем управление блоку, а когда он закончит работу, восстанавливаем состояние, вызывая предоставленный библиотекой метод
restore_state15.4.2. Пример документа
Для демонстрации рассмотренной выше техники мы создадим четыре страницы в четырех разных квадрантах. Три из них — слегка измененные варианты демонстрационных программ, включённых в дистрибутив
PDF::Writer•
demo.rb•
individual-i.rb•
gettysburg.rbЧетвертая страница (в квадранте 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_stateendpdf = PDF::Writer.newpdf.select_font("Times-Roman", rencoding => "WinAnsiEncoding", differences => { 0x01 => "lozenge" })mx = pdf.absolute_x_middlemy = pdf.absolute_y_middlepdf.line(0, my, pdf.page_width, my).strokepdf.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) endendpdf.fill_color Color::RGB::Black# Правый верхний: Grampian Highlands (UR).
