import os
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Frame, PageTemplate
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
# --- 1. Настройка шрифтов (Кириллица) ---
# Пытаемся найти стандартный шрифт с кириллицей в Linux окружении
font_path = "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"
bold_font_path = "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf"
if not os.path.exists(font_path):
# Фолбек, если шрифта нет (обычно в Colab/Linux есть)
font_path = "DejaVuSans.ttf"
try:
pdfmetrics.registerFont(TTFont('Normal', font_path))
pdfmetrics.registerFont(TTFont('Bold', bold_font_path))
except:
# Если шрифтов нет, используем стандартные (но кириллица может слететь без TTF)
# В реальной среде лучше подгрузить свой шрифт
pass
# --- 2. Контент Чек-листа ---
title_text = "ЧЕК-ЛИСТ: 7 ДЕТАЛЕЙ ОБРАЗА «НА МИЛЛИОН»"
subtitle_text = "Истинная роскошь — тихая. Ей не нужны кричащие бирки."
items = [
{
"title": "1. «ВОЗДУХ» МЕЖДУ ТЕЛОМ И ТКАНЬЮ",
"text": "Вещи в облипку часто выглядят дешево. Оверсайз или полуприлегание всегда смотрятся статуснее.",
"rule": "Покупайте вещи на размер больше и ушивайте в талии. Это эффект «индивидуального пошива»."
},
{
"title": "2. ДОРОГАЯ ФУРНИТУРА",
"text": "Дешевый пластик убивает любой крой. Срежьте родные пуговицы масс-маркета и пришейте качественные.",
"rule": "Жакет за 5.000 ₽ с дорогими пуговицами начинает выглядеть на 50.000 ₽."
},
{
"title": "3. «НЕВИДИМОЕ» БЕЛЬЕ",
"text": "Контуры белья или пережатая кожа удешевляют образ мгновенно.",
"rule": "Только бесшовное белье телесного цвета. Гладкий силуэт — база элегантности."
},
{
"title": "4. ИНТЕЛЛЕКТУАЛЬНАЯ ПАЛИТРА (МОНОХРОМ)",
"text": "Образ, собранный в одном цвете (бежевый, шоколадный, серый), всегда выглядит выше по классу.",
"rule": "Разбавляйте образ не цветом, а фактурами (шелк + шерсть, кожа + кашемир)."
},
{
"title": "5. СОСТОЯНИЕ «НИЖНЕГО ЭТАЖА»",
"text": "Сбитые набойки и солевые разводы — это приговор. Обувь должна быть идеально чистой.",
"rule": "Носите с собой губку. Цоканье стертого каблука разрушает магию."
},
{
"title": "6. УХОЖЕННОСТЬ (ГОЛОВА И РУКИ)",
"text": "Секущиеся концы или отросший гель-лак испортят даже Chanel.",
"rule": "«Дорого» — это про здоровье волос и свежий маникюр (лучше нюд, чем отросший дизайн)."
},
{
"title": "7. КОРОЛЕВСКАЯ ОСАНКА",
"text": "Сутулая спина превращает любой костюм в мешок.",
"rule": "Подбородок параллельно полу. Уверенная походка — самый дорогой аксессуар."
}
]
footer_text = "Хочешь узнать, какие фасоны подходят именно тебе?
Нажми кнопку «Хочу разбор» в боте."
# --- 3. Генерация PDF ---
def create_luxury_pdf(filename):
doc = SimpleDocTemplate(
filename,
pagesize=A4,
rightMargin=2*cm, leftMargin=2*cm,
topMargin=2*cm, bottomMargin=2*cm
)
styles = getSampleStyleSheet()
# Стили "Тихая Роскошь"
# Цвета: Dark Grey #333333, Gold #C5A065
style_title = ParagraphStyle(
'LuxuryTitle',
parent=styles['Heading1'],
fontName='Bold',
fontSize=20,
leading=24,
alignment=1, # Center
textColor=colors.HexColor("#333333"),
spaceAfter=10
)
style_subtitle = ParagraphStyle(
'LuxurySubtitle',
parent=styles['Normal'],
fontName='Normal',
fontSize=12,
leading=14,
alignment=1, # Center
textColor=colors.HexColor("#666666"),
spaceAfter=30
)
style_item_title = ParagraphStyle(
'ItemTitle',
parent=styles['Heading3'],
fontName='Bold',
fontSize=12,
leading=14,
textColor=colors.HexColor("#C5A065"), # Gold accent
spaceBefore=15,
spaceAfter=5
)
style_body = ParagraphStyle(
'BodyText',
parent=styles['Normal'],
fontName='Normal',
fontSize=10,
leading=14,
textColor=colors.HexColor("#333333"),
spaceAfter=5
)
style_rule = ParagraphStyle(
'RuleText',
parent=styles['Normal'],
fontName='Normal', # Можно Bold если есть шрифт
fontSize=10,
leading=14,
textColor=colors.HexColor("#000000"),
backColor=colors.HexColor("#F5F5F5"), # Light grey bg
borderPadding=5,
spaceAfter=10
)
style_footer = ParagraphStyle(
'Footer',
parent=styles['Normal'],
fontName='Normal',
fontSize=11,
alignment=1,
textColor=colors.HexColor("#C5A065"),
spaceBefore=30
)
story = []
# Заголовок
story.append(Paragraph(title_text, style_title))
story.append(Paragraph(subtitle_text, style_subtitle))
story.append(Spacer(1, 0.5*cm))
# Линия разделитель
# (В reportlab сложно просто линию, делаем пустой блок или используем графику в канвасе, но для простоты пропустим)
# Пункты
for item in items:
story.append(Paragraph(item['title'], style_item_title))
story.append(Paragraph(item['text'], style_body))
story.append(Paragraph(f"ПРАВИЛО: {item['rule']}", style_rule))
# Футер
story.append(Spacer(1, 1*cm))
story.append(Paragraph(footer_text, style_footer))
doc.build(story)
# Создаем файл
create_luxury_pdf("Checklist_DNA_Successful_Woman.pdf")