JavaRush /Курси /Python SELF UA /Стілізація тексту та заголовків у PDF-документи за допомо...

Стілізація тексту та заголовків у PDF-документи за допомогою ReportLab

Python SELF UA
Рівень 44 , Лекція 3
Відкрита

1. Основи додавання тексту та заголовків у PDF

В ReportLab текст додається за допомогою об'єкта canvas, який надає методи для налаштування шрифтів, кольорів, розмірів та позицій тексту.

Створення простого PDF із заголовком і текстом

Python

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4

# Створюємо новий PDF
pdf_file = canvas.Canvas("styled_text.pdf", pagesize=A4)
width, height = A4

# Додаємо заголовок
pdf_file.setFont("Helvetica-Bold", 20)
pdf_file.drawString(100, height - 100, "Звіт про продажі")

# Додаємо основний текст
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Цей документ містить інформацію про продажі за останній квартал.")

# Збереження PDF
pdf_file.save()

Цей код створює PDF-файл, який містить заголовок і основний текст. Ми задаємо шрифт і розмір тексту за допомогою методу setFont().

2. Стілізація і форматування тексту

В ReportLab можна змінювати колір, шрифт і розмір тексту, створюючи стильні заголовки і основний контент. Це допомагає структурувати документ і робить його зручнішим для читання.

Зміна шрифту і розміру тексту

ReportLab підтримує стандартні шрифти, такі як Helvetica, Times-Roman та Courier. Ви можете вказати стиль шрифту (звичайний, жирний або курсив) і розмір, використовуючи setFont().

Python

pdf_file.setFont("Helvetica-Bold", 18)  # Заголовок жирним шрифтом
pdf_file.drawString(100, height - 50, "Головний заголовок")

pdf_file.setFont("Helvetica-Oblique", 14)  # Підзаголовок курсивом
pdf_file.drawString(100, height - 80, "Підзаголовок: Підсумки кварталу")

Зміна кольору тексту

Ви можете змінити колір тексту за допомогою методу setFillColorRGB(), який приймає значення RGB від 0 до 1.

Python

pdf_file.setFillColorRGB(0.2, 0.4, 0.6)  # Синій колір
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 110, "Цей текст має синій колір.")

Можна також використовувати попередньо задані кольори з reportlab.lib.colors.

Python

from reportlab.lib import colors

pdf_file.setFillColor(colors.red)
pdf_file.drawString(100, height - 140, "Червоний текст")

3. Вирівнювання та багаторядковий текст

Якщо текст довгий, його краще представити в багаторядковому форматі. ReportLab надає клас TextObject, який підтримує автоматичний перенос рядків.

Багаторядковий текст з TextObject

Python

text = """
Звіт містить аналіз продажів за останні три місяці.
Ми розглядаємо зміни та їх вплив на загальне зростання компанії.
"""

text_object = pdf_file.beginText(100, height - 180)
text_object.setFont("Helvetica", 12)
text_object.setFillColor(colors.darkblue)

for line in text.split("\n"):
    text_object.textLine(line)

pdf_file.drawText(text_object)

Цей код створює текстовий блок з кількома рядками, кожен з яких додається в PDF. Використання TextObject зручно для довгого тексту, оскільки забезпечує автоформатування.

4. Використання абзаців для стилізації тексту

Клас Paragraph з модуля reportlab.platypus дозволяє додавати стилізований текст із підтримкою HTML-тегів, таких як <b>, <i> та <u>. Paragraph також підтримує вирівнювання та відступи, що робить його ідеальним для створення форматованого тексту.

Створення абзаців з Paragraph

Python

from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import SimpleDocTemplate, Paragraph

# Налаштування PDF
doc = SimpleDocTemplate("styled_paragraphs.pdf", pagesize=A4)
styles = getSampleStyleSheet()
elements = []

# Створення абзацу з жирним і курсивним текстом
text = "Звіт про продажі
Квартальний звіт 2023 року" paragraph = Paragraph(text, styles["Title"]) elements.append(paragraph) # Додавання основного тексту main_text = """ Цей звіт містить ключові дані про продажі за останній квартал, а також аналіз впливу продажів на загальний дохід компанії. """ paragraph = Paragraph(main_text, styles["BodyText"]) elements.append(paragraph) # Побудова PDF doc.build(elements)

Тут ми використовуємо Paragraph для додавання форматованого тексту, який включає HTML-теги для стилізації (жирний і курсивний текст). getSampleStyleSheet() надає базові стилі, такі як Title та BodyText, які можна змінювати.

5. Застосування стилів тексту

ReportLab дозволяє створювати і налаштовувати власні стилі, які можна використовувати для форматування тексту. Це особливо корисно при створенні звітів, де використовуються повторювані стилі для заголовків, підзаголовків і основного тексту.

Налаштування користувацького стилю

Python

from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import ParagraphStyle
from reportlab.platypus import SimpleDocTemplate, Paragraph

# Налаштування PDF
doc = SimpleDocTemplate("custom_styles.pdf", pagesize=A4)
elements = []

# Створення користувацького стилю
custom_style = ParagraphStyle(
    name="CustomStyle",
    fontName="Helvetica-Bold",
    fontSize=14,
    leading=18,
    textColor=colors.darkgreen,
    spaceAfter=10,
)

# Створення абзацу з користувацьким стилем
paragraph = Paragraph("Це заголовок з користувацьким стилем", custom_style)
elements.append(paragraph)

# Додавання основного тексту
default_style = ParagraphStyle(
    name="Default",
    fontName="Helvetica",
    fontSize=12,
    leading=14,
    textColor=colors.black,
    spaceAfter=10,
)
paragraph = Paragraph("Це основний текст з використанням стандартного стилю.", default_style)
elements.append(paragraph)

# Побудова PDF
doc.build(elements)

У цьому прикладі ми створюємо користувацький стиль CustomStyle із зеленим кольором тексту та більшим шрифтом, який застосовуємо до заголовка.

6. Створення документа з заголовками і текстом

Для того щоб PDF-документ був більш структурованим, можна створити багатосторінковий звіт із розділами, кожен з яких має свій заголовок і стилізований текст.

Створення структурованого багатосторінкового звіту

Python

from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.platypus import SimpleDocTemplate, Paragraph, PageBreak

# Налаштування PDF
doc = SimpleDocTemplate("structured_report.pdf", pagesize=A4)
styles = getSampleStyleSheet()
elements = []

# Стиль для заголовка
title_style = ParagraphStyle("TitleStyle", parent=styles["Title"], fontSize=18, spaceAfter=12)

# Заголовок першої сторінки
title = Paragraph("Звіт про продажі за 2023 рік", title_style)
elements.append(title)

# Основний текст
main_text = """
Цей звіт надає детальну інформацію про продажі компанії за перший квартал 2023 року.
Включені дані по регіонах, категоріях продуктів і ключових показниках.
"""
elements.append(Paragraph(main_text, styles["BodyText"]))

# Перехід на нову сторінку
elements.append(PageBreak())

# Заголовок другої сторінки
subtitle = Paragraph("Аналіз продажів за категоріями", title_style)
elements.append(subtitle)

# Текст для другої сторінки
category_text = """
На другій сторінці представлені дані про продажі за категоріями продуктів.
Кожна категорія проаналізована із урахуванням динаміки продажів і змін на ринку.
"""
elements.append(Paragraph(category_text, styles["BodyText"]))

7. Тонкощі форматування тексту

Вибір шрифтів і їх розмірів

Світ PDF — це не лише суха структура документа, а й можливість проявити творчість у тексті. Хоча reportlab підтримує багато варіантів налаштування шрифтів та стилів, важливо враховувати деякі обмеження. Наприклад, деякі шрифти можуть не підтримуватися, особливо якщо у вас немає їх ліцензійних копій.

Для налаштування шрифту ми використовували метод setFont, який приймає назву шрифту та його розмір:

Python

c.setFont("Times-Roman", 12)

Стилізація заголовків

Можливо, вам захочеться виділити заголовки та зробити їх більш помітними. Це можна зробити, збільшивши розмір шрифту або зробивши його напівжирним. Зверніть увагу, як ми використовували Helvetica-Bold для заголовків.

Вирівнювання тексту

У reportlab текст за замовчуванням вирівнюється по лівому краю, але ви можете це змінити, використовуючи методи для обчислення ширини тексту та центрування. Це буде корисно для створення більш складних композицій тексту на сторінці.

8. Реальне застосування

Ось декілька сценаріїв, де додавання тексту та заголовків у PDF може бути корисним:

  • Автоматизовані звіти. Ви можете формувати звіти з динамічним текстом, отриманим з ваших аналізів даних.
  • Документи зі змістом. Додавання заголовків і підзаголовків полегшує навігацію по документах, особливо великих.
  • Персоналізовані документи. Якщо ваш проект вимагає створення індивідуалізованих документів, наприклад, сертифікатів або запрошень, автоматизація тексту в PDF буде надзвичайно корисною.

Типові помилки

Іноді при створенні PDF ви можете зіткнутися з проблемами. Частою помилкою є використання непідтримуваних шрифтів або неправильне розміщення тексту через не враховані розміри сторінки. Протестуйте ваш скрипт на декількох прикладах, щоб переконатися, що текст виводиться коректно на всіх платформах і пристроях.

Для отримання додаткової інформації та більш складних прикладів, зверніться до документації ReportLab та PyPDF2 GitHub, де ви знайдете безліч прикладів і порад з використання.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ