В материале приведены примеры использования методов, позволяющих рисовать различные фигуры в создаваемом PDF-документе, при помощи модуля fpdf2
в Python.
Пример создания тонкой однотонной оранжевой линии:
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
, то первая и последняя точка будут так же соединеныПример круга, залитый серым цветом, с розовым контуром:
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'
: рисовать границу и заполнять.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'
: рисовать границу и заполнять.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'
: рисовать границу и заполнять.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'
: рисовать границу и заполнять.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()
не затрагиваются, как и механизм автоматического разрыва страницы. Вращение также устанавливает локальное состояние графики, так что любые настройки состояния графики, измененные внутри, не повлияют на операции, вызываемые после его завершения.