Сообщить об ошибке.

Методы отрисовки различных фигур в PDF-документе

В материале приведены примеры использования методов, позволяющих рисовать различные фигуры в создаваемом PDF-документе, при помощи модуля fpdf2 в Python.

Содержание:


Способы отрисовки линий в PDF-документе.

Пример создания тонкой однотонной оранжевой линии:

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
# толщина линии
pdf.set_line_width(0.5)
# цвет линии
pdf.set_draw_color(r=255, g=128, b=0)
# отрисовка линии
pdf.line(x1=50, y1=50, x2=150, y2=100)
pdf.output("orange_plain_line.pdf")

Пример создания пунктирной голубой линии:

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
# толщина линии
pdf.set_line_width(0.5)
# цвет линии
pdf.set_draw_color(r=0, g=128, b=255)
# задание стиля линии
pdf.set_dash_pattern(dash=2, gap=3)
# отрисовка линии
pdf.line(x1=50, y1=50, x2=150, y2=100)
pdf.output("blue_dashed_line.pdf")

FPDF.line(x1, y1, x2, y2):

Метод FPDF.line() рисует линию между двумя точками.

Аргументы:

  • x1: абсцисса первой точки;
  • y1: ордината первой точки;
  • x2: абсцисса второй точки;
  • y2: ордината второй точки;

FPDF.polyline(point_list, fill=False, polygon=False):

Метод FPDF.polyline() рисует линии между двумя или более точками.

Аргументы:

  • point_list: принимает список кортежей. Кортежи - это положение (x, y) точки на PDF-листе, которые будут соединены прямой.
  • fill=False: если True, то произойдет заполнение цветом.
  • polygon=False: если True, то первая и последняя точка будут так же соединены

Метод отрисовки эллипса в PDF-документе.

Пример круга, залитый серым цветом, с розовым контуром:

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_line_width(2)
pdf.set_draw_color(r=230, g=30, b=180)
pdf.set_fill_color(240)
pdf.ellipse(x=50, y=50, w=50, h=50, style="FD")
pdf.output("circle.pdf")

FPDF.ellipse(x, y, w, h, style=None):

Метод FPDF.ellipse() рисует круг/эллипс. Он может быть нарисован (только с рамкой), заполнен (без рамки) или и то, и другое.

Аргументы:

  • x: абсцисса левого верхнего прямоугольника.
  • y: ордината левого верхнего прямоугольника.
  • w: ширина
  • h: высота
  • style: стиль отрисовки. Возможные значения:

    • 'D' или пустая строка: рисует границу. Это значение по умолчанию.
    • 'F': только выполнять заливку цветом.
    • 'DF' или 'FD': рисовать границу и заполнять.

Метод отрисовки прямоугольника в PDF-документе.

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
for i in range(15):
    pdf.set_fill_color(255 - 15*i)
    pdf.rect(x=5+5*i, y=5+5*i, w=200-10*i, h=200-10*i, style="FD")
pdf.output("squares.pdf")

FPDF.rect(x, y, w, h, style=None):

Метод FPDF.rect() рисует прямоугольник. Он может быть нарисован (только с рамкой), заполнен (без рамки) или и то, и другое.

Аргументы:

  • x: абсцисса левого верхнего ограничивающего прямоугольника.
  • y: ордината левого верхнего ограничивающего прямоугольника.
  • w: ширина
  • h: высота
  • style: стиль отрисовки. Возможные значения:

    • 'D' или пустая строка: рисует границу. Это значение по умолчанию.
    • 'F': только выполнять заливку цветом.
    • 'DF' или 'FD': рисовать границу и заполнять.

Метод отрисовки многоугольника в PDF-документе.

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_line_width(2)
pdf.set_fill_color(r=255, g=0, b=0)
coords = ((100, 0), (5, 69), (41, 181), (159, 181), (195, 69))
pdf.polygon(coords, fill=True)
pdf.output("polygon.pdf")

FPDF.polygon(point_list, fill=False):

Метод FPDF.polygon() рисует многоугольник, определенный тремя или более точками.

Аргументы:

  • point_list: принимает список кортежей, представляющий список абсцисс и ординат многоугольника, который необходимо нарисовать.
  • fill=False: если True, то произойдет заполнение цветом.

FPDF.regular_polygon(x, y, numSides, polyWidth, rotateDegrees=0, style=None):

Метод FPDF.regular_polygon() рисует правильный многоугольник с количеством сторон numSides. Его можно повернуть. Также можно применить стиль (заливка, граница…)

Аргументы:

  • x: абсцисса левого верхнего ограничивающего прямоугольника.
  • y: ордината левого верхнего ограничивающего прямоугольника.
  • numSides: количество сторон многоугольника.
  • polyWidth: ширина многоугольника.
  • rotateDegrees: количество градусов, для поворота многоугольника (можно оставить пустым).
  • style: стиль отрисовки (можно оставить пустым). Возможные значения:

    • 'D' или пустая строка: рисует границу. Это значение по умолчанию.
    • 'F': только выполнять заливку цветом.
    • 'DF' или 'FD': рисовать границу и заполнять.

Метод отрисовки дуги в PDF-документе.

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_line_width(2)
pdf.set_fill_color(r=255, g=0, b=0)
pdf.arc(x=75, y=75, a=25, b=25, start_angle=30, end_angle=130, style="FD")
pdf.output("arc.pdf")
FPDF.arc(x, y, a, start_angle, end_angle, b=None, inclination=0, clockwise=False, start_from_center=False, end_at_center=False, style=None):

Метод FPDF.arc() рисует дугу. Она может быть нарисована (только с рамкой), заполнена (без рамки) или и то, и другое.

Аргументы:

  • x: int, абсцисса левого верхнего ограничивающего прямоугольника.
  • y: int, ордината левого верхнего ограничивающего прямоугольника.
  • a: int, диаметр большой полуоси.
  • b=None (int): int, диаметр малой полуоси, если None, то равен a.
  • start_angle: int, начальный угол дуги (в градусах).
  • end_angle: int, конечный угол дуги (в градусах).
  • inclination=0: наклон дуги относительно оси x (по умолчанию: 0).
  • clockwise=False: способ рисования дуги (True: по часовой стрелке, False: против часовой стрелки).
  • start_from_center=False: начать рисование от центра круга.
  • end_at_center=False: завершить рисование в центре круга.
  • style: стиль отрисовки (можно оставить пустым). Возможные значения:

    • 'D' или пустая строка: рисует границу. Это значение по умолчанию.
    • 'F': только выполнять заливку цветом.
    • 'DF' или 'FD': рисовать границу и заполнять.

Метод отрисовки замкнутой дуги в PDF-документе.

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_line_width(2)
pdf.set_fill_color(r=255, g=0, b=0)
pdf.solid_arc(x=75, y=75, a=25, b=25, start_angle=30, end_angle=130, style="FD")
pdf.output("solid_arc.pdf")
FPDF.solid_arc(x, y, a, start_angle, end_angle, b=None, inclination=0, clockwise=False, style=None):

Метод FPDF.solid_arc() рисует замкнутую дугу. Она может быть нарисована (только с рамкой), заполнена (без рамки) или и то, и другое.

Аргументы:

  • x: int, абсцисса левого верхнего ограничивающего прямоугольника.
  • y: int, ордината левого верхнего ограничивающего прямоугольника.
  • a: int, диаметр большой полуоси.
  • b=None (int): int, диаметр малой полуоси, если None, то равен a.
  • start_angle: int, начальный угол дуги (в градусах).
  • end_angle: int, конечный угол дуги (в градусах).
  • inclination=0: наклон дуги относительно оси x (по умолчанию: 0).
  • clockwise=False: способ рисования дуги (True: по часовой стрелке, False: против часовой стрелки).
  • style: стиль отрисовки (можно оставить пустым). Возможные значения:

    • 'D' или пустая строка: рисует границу. Это значение по умолчанию.
    • 'F': только выполнять заливку цветом.
    • 'DF' или 'FD': рисовать границу и заполнять.

Как повернуть нарисованные фигуры?

FPDF.rotation(angle, x=None, y=None):

Метод FPDF.rotation() позволяет выполнять вращение вокруг заданного центра. Он должен использоваться в качестве контекстного менеджера:

with pdf.rotation(angle=90, x=x, y=y):
    pdf.something()

Поворот влияет на все элементы, которые выводятся в PDF-документ внутри контекста with (за исключением кликабельных областей).

Аргументы:

  • angle: float, угол поворота в градусах;
  • x: float, абсцисса центра вращенияж
  • y: float, ордината центра вращения.

Примечание:

Меняется только рендеринг. Методы FPDF.get_x() и FPDF.get_y() не затрагиваются, как и механизм автоматического разрыва страницы. Вращение также устанавливает локальное состояние графики, так что любые настройки состояния графики, измененные внутри, не повлияют на операции, вызываемые после его завершения.