Меняем размер/ориентацию страницы.Полагаю, вы уже успели заметить, что если не сообщить ReportLab’у о размерах создаваемой страницы, то он сгенерирует привычный A4, поскольку этот формат является стандартом де-факто как у нас, так и в Европе.
Разумеется, размер и ориентацию страницы при необходимости можно поменять. Причем, мы можем воспользоваться как готовыми наборами стандартных форматов (A0…A6, B0…B6, американские Letter и Legal) из модуля reportlab/lib/pagesizes.py, так и указать произвольный размер листа в пт, см, дюймах и т.д.
Задавать размер страницы можно как на этапе инициализации холста, так и в процессе отрисовки на холст.
Пример 5 (задаем размер страницы при инициализации холста):
from reportlab.pdfgen import canvas
#импортируем формат A5 из модуля reportlab/lib/pagesizes.py
from reportlab.lib.pagesizes import A5
#создаем холст MyCanvas, а в качестве аргументов передаем конструктору
#класса не только имя будущего PDF файла (как мы делали раньше), но и
#размер страницы – A5 (14.8 x 21.0 см):
MyCanvas = canvas.Canvas("hello.pdf", pagesize=A5)
MyCanvas .drawString(200,300,"Hello World")
MyCanvas .save()
Теперь первая и все последующие (если таковые имеются) страницы этого документа будут A5-го формата.
А сейчас создадим документ у которого первая страница будет стандартная A4 (но с альбомной ориентацией), вторая произвольного размера (например, 15x15 см), а третья и все последующие - A5 с книжной ориентацией.
Пример 6
from reportlab.pdfgen import canvas
from reportlab.lib.units import cm
from reportlab.lib.pagesizes import A4, A5, landscape, portrait
#При создании документа сразу задаем размер страницы A4 и
#приводим ее к альбомной ориентации (функция landscape):
MyCanvas = canvas.Canvas("hello.pdf", pagesize=landscape(A4))
MyCanvas .drawString(200,300,"Hello World")
MyCanvas .showPage()
#Вторую страницу сделаем произвольного размера (15X15см) при помощи
#метода setPageSize(), которому следует передать кортеж с размерами
#по горизонтали и вертикали:
MyCanvas .setPageSize((15*cm, 15*cm))
MyCanvas .drawString(200,300,"Hello World")
MyCanvas .showPage()
#Третья страница у нас будет A5 книжной ориентации (функция portrait).
#В принципе, функцию portrait можно не применять - по умолчанию ориентация
#и так окажется книжной, но мы явно пропишем это, чтобы продемонстрировать
#наличие такой возможности:
MyCanvas .setPageSize(portrait(A5))
MyCanvas .drawString(200,300,"Hello World")
MyCanvas .showPage()
#Напоследок трижды вызываем метод showPage() (создаем три пустых страницы),
#чтобы продемонстрировать, что после любых изменений размера листа эти
#изменения остаются в силе вплоть до закрытия холста:
MyCanvas .showPage()
MyCanvas .showPage()
MyCanvas .showPage()
MyCanvas .save()