Автор оригинала: Mike Driscoll.
Есть времена, когда вы хотите вращать изображения или другие объекты в ReportLab при создании PDF. Например, вы можете повернуть изображение на 45 градусов для водяных знаков. Или вам может понадобиться изображение, которое проходит вертикально по одному из краев PDF.
Вы можете повернуть изображения, используя RegingLab холст Методы или используя его более высокие расходы на более высокий уровень, которые вы можете найти в утконос Отказ модуль. Давайте начнем с поиска того, как сделать это с холстом напрямую!
Вращающиеся изображения с помощью холста
Вращающиеся изображения с использованием холста – это путание. Причина в том, что когда вы вращаете холст, вы можете в конечном итоге непреднамеренно вращать другие элементы на холсте, если вы не осторожны.
Давайте посмотрим на код:
# image_on_canvas.py
from reportlab.lib import utils
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
def add_image(image_path):
img = utils.ImageReader(image_path)
img_width, img_height = img.getSize()
aspect = img_height / float(img_width)
my_canvas = canvas.Canvas("canvas_image.pdf",
pagesize=letter)
my_canvas.saveState()
my_canvas.rotate(45)
my_canvas.drawImage(image_path, 150, 10,
width=100, height=(100 * aspect))
my_canvas.restoreState()
my_canvas.save()
if __name__ == '__main__':
image_path = 'snakehead.jpg'
add_image(image_path)
Здесь вы используете ReportLab’s Utils Функция для извлечения ширины и высоты изображения. Затем вы создаете холст и сохраните его текущее состояние. Это позволит вам изменить холст с этого момента вперед и затем восстановить его позже. Если вы хотите иметь некоторый текст или формы перед поворотом изображение, вы бы поместили этот код до вызова на Savestate () Отказ
После сохранения состояния холста вы можете использовать Canvas вращаться () Способ повернуть холст 45 градусов. Затем вы рисуете изображение на холст. Наконец вы используете восстановить () Чтобы восстановить состояние обратно к тому, что он был до того, как вы повернули.
Примечание. При вращении холста позиция X/Y теперь находится на угле 45 градусов, поэтому вам придется принять это во внимание при позиционировании изображения на вашем холсте.
Когда я запустил этот код, я оказался документом, который выглядел так:
Вы также можете скачать PDF здесь.
Теперь давайте узнаем, как сделать то же самое, используя текучее!
Вращающиеся изображения с использованием образующего изображения
Flowables являются объектами в ReportLab, которые приходят с их модуля Platypus, который стоит Макет страницы и типография с помощью сценариев Отказ Этот модуль в основном является интерфейсом высокого уровня к способам холста, которые тезисывают чертежные биты, и делает создание умноженных документов намного проще.
Самый быстрый способ создания повернутого изображения с использованием текучего потока в ReportLab – подкласс Изображение Текучий. Давайте взглянем!
from reportlab.lib.pagesizes import letter
from reportlab.platypus import Image, SimpleDocTemplate
class RotatedImage(Image):
def wrap(self, availWidth, availHeight):
height, width = Image.wrap(self, availHeight, availWidth)
return width, height
def draw(self):
self.canv.rotate(45)
Image.draw(self)
doc = SimpleDocTemplate("image_with_rotation.pdf", pagesize=letter)
flowables = []
img = RotatedImage('snakehead.jpg',
width=50, height=50
)
img.hAlign = 'CENTER'
flowables.append(img)
doc.build(flowables)
Здесь вы подкласс изображения и переопределите обернуть () и Рисовать () методы. Главный кусок, о котором вы будете заботиться, находится в методе Draw (), где вы звоните self.canv.rotate (45) Отказ У класса Image есть собственный холст в нем, что вы можете манипулировать. В этом случае вы говорите, что вы хотите всегда нарисовать изображение с углом 45 градусов.
Затем вы создаете шаблон документа и создаете экземпляр RotateatedImage Отказ Затем вы говорите изображение, чтобы быть центрированным на странице. Наконец ты построить () документ.
Когда вы запускаете этот код, вы должны увидеть следующее:
Вы можете получить фактический PDF здесь, если вы хотите увидеть файл.
Обертывание
Теперь вы знаете, как повернуть изображения с помощью ReportLab. Вы узнали, как повернуть изображение с использованием методов холста низкого уровня, и вы также узнали, как повернуть образуемый образ. Вы можете использовать эти знания, чтобы повернуть другие виды объектов. Например, вы можете вращать текст и формы, используя ту же методологию. Вы всегда будете вращать холст, чтобы получить необходимый эффект. Весело и счастливое кодирование!
| Хотите узнать больше о работе с PDFS в Python? Затем проверьте мою книгу: REPORTLAB: PDF Обработка с покупкой Python Now на ScenPub |
Связанное чтение
- Простой пошаговый Учебник ReportLab
- Создание интерактивных форм PDF в ReportLab с Python
- ReportLab: Добавление диаграммы в PDF с Python