Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Но, возможно, вас не мучает вопрос, от имени какого объекта следует вызывать метод. Тем лучше!..
Покончив с сеткой, мы переходим к рисованию фигур. Метод
circle
rectangle
У каждого графического объекта есть еще несколько методов. Взгляните на этот «сцепленный» вызов:
shape.stroke('black').stroke_width(1)
Это что-то вроде пера, которое рисует черными чернилами линию толщиной в один пиксель. Цвет штриха часто имеет значение, особенно если мы хотим закрасить фигуру.
Конечно, у каждой из трех этих фигур есть еще метод
fill
fill
API рисования содержит также методы для настройки полупрозрачности, пространственных преобразований и многого другого. Есть методы для анализа, рисования и манипулирования текстовыми строками. Существует даже специальный RVG API (Ruby Vector Graphics — векторная графика в Ruby), совместимый с рекомендацией консорциума W3C по масштабируемой векторной графике (SVG).
Мы не можем привести здесь документацию по всем этим бесчисленным возможностям. Дополнительную информацию вы можете найти на сайте http://rmagick.rubyforge.org.
15.4. Создание документов в формате PDF с помощью библиотеки PDF::Writer
Библиотека
PDF::Writer
require 'rubygems'
require 'pdf/writer'
pdf = PDF::Writer.new
15.4.1. Основные концепции и приемы
Одна из серьезных проблем, встающих перед любым дизайнером документов, - текстовые шрифты. Библиотека
PDF::Writer
• Times-Roman
• Helvetica
• Courier
• ZapfDingbats
• Symbol
Если шрифт не указан, по умолчанию предполагается Helvetica. При выборе шрифта можно создать таблицу замены символов, которая позволяет имитировать символы, не имеющие графического начертания или отсутствующие в кодовой странице. В шрифтах Times-Roman, Helvetica и Courier по 315 печатаемых символов (из них у 149 есть предопределенные байтовые коды); в шрифте Symbol — 190 символов (у 189 есть предопределенные коды), а в шрифте ZapfDingbats — 202 символа (всем соответствуют коды). Шрифты представлены в кодировке Adobe, но в момент выбора шрифта отдельные символы можно переопределить.
Текущая версия не позволяет напечатать все 315 символов, определенных в шрифтовом файле, поскольку после того как шрифт выбран, изменить таблицу замены символов уже невозможно. В последующих версиях
PDF::Writer
В следующем примере мы задали для PDF-документа шрифт Times-Roman. Программа чтения PDF-файлов будет считать, что текст представлен в кодировке
WinAnsiEncoding
0x01
pdf.select_font "Times-Roman",
{ :encoding => "WinAnsiEncoding",
:differences => {0x01 => "lozenge"}
}
Библиотека
PDF::Writer
В текущей версии
PDF::Writer
Для демонстрации создадим метод
quadrant
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 # pdf.translate_axis(0, 0)
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.translate_axis x, y)
Предположим, что начало координат находится не в точке
(0, 0)
(50, 50)
(15, 20)
(35, 40)
(65, 70)
(85, 90)