from reportlab.lib.pagesizes import A4
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, PageBreak
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER
from reportlab.lib.units import cm
path = "/mnt/data/Scheda_gambe_7_giorni.pdf"
doc = SimpleDocTemplate(
path, pagesize=A4,
rightMargin=1.5*cm, leftMargin=1.5*cm,
topMargin=1.4*cm, bottomMargin=1.4*cm
)
styles = getSampleStyleSheet()
title = ParagraphStyle("TitleCustom", parent=styles["Title"], fontSize=20, leading=24, alignment=TA_CENTER, spaceAfter=10)
h1 = ParagraphStyle("H1Custom", parent=styles["Heading1"], fontSize=15, leading=18, spaceBefore=8, spaceAfter=6)
body = ParagraphStyle("BodyCustom", parent=styles["BodyText"], fontSize=9.5, leading=13)
small = ParagraphStyle("SmallCustom", parent=body, fontSize=8.5, leading=11)
story = []
story.append(Paragraph("PROGRAMMA GAMBE — 7 GIORNI", title))
story.append(Paragraph(
"Obiettivo: gambe più toniche e compatte, glutei più attivi e movimento regolare. "
"Attrezzatura: panca, elastici e manubri regolabili fino a 20 kg. "
"I carichi indicati sono iniziali e sono espressi per singolo manubrio quando ne usi due.",
body
))
story.append(Spacer(1, 8))
story.append(Paragraph(
"<b>Regola del carico:</b> le ultime 2–3 ripetizioni devono essere impegnative ma con tecnica pulita. "
"Se il peso è troppo pesante, riducilo; se è molto facile, aumenta gradualmente. "
"Non serve arrivare al cedimento.",
body
))
story.append(Spacer(1, 10))
days = [
("GIORNO 1 — GAMBE + GLUTEI A", [
("Riscaldamento", "5–7 min", "Camminata sul posto + squat a corpo libero + glute bridge + mobilità anche."),
("Hip thrust", "4 × 12", "10 kg su un solo manubrio; appoggialo sul bacino. Pausa 1–2 s in alto."),
("Goblet squat", "3 × 12", "8 kg su un solo manubrio davanti al petto."),
("Bulgarian split squat", "3 × 8/gamba", "3 kg per mano (6 kg totali). Movimento lento e controllato."),
("Romanian deadlift", "3 × 10", "5 kg per mano (10 kg totali). Bacino indietro, schiena neutra."),
("Abduzioni", "3 × 20", "Elastico, controllo del movimento."),
("Calf raises", "3 × 20", "5 kg per mano (10 kg totali)."),
("Recupero", "60–90 s", "Tra le serie; fino a 120 s negli esercizi più impegnativi.")
]),
("GIORNO 2 — MOVIMENTO + RECUPERO", [
("Camminata", "35–45 min", "Ritmo sostenuto ma confortevole."),
("Mobilità", "10 min", "Caviglie, anche e posteriori delle gambe; senza stretching aggressivo."),
("Gambe sollevate", "10–15 min", "Facoltativo, soprattutto se senti le gambe gonfie/pesanti.")
]),
("GIORNO 3 — FEMORALI + GLUTEI B", [
("Riscaldamento", "5–7 min", "Come Giorno 1."),
("Romanian deadlift", "4 × 10", "6 kg per mano (12 kg totali)."),
("Hip thrust", "4 × 10–12", "12 kg su un solo manubrio."),
("Reverse lunges", "3 × 10/gamba", "3 kg per mano (6 kg totali)."),
("Step-up", "3 × 10/gamba", "2 kg per mano (4 kg totali). Solo se la panca è stabile; altrimenti reverse lunge a corpo libero."),
("Kickback", "3 × 15/gamba", "Elastico; movimento controllato."),
("Calf raises", "3 × 20", "6 kg per mano (12 kg totali)."),
("Recupero", "60–90 s", "Fino a 120 s se necessario.")
]),
("GIORNO 4 — RECUPERO ATTIVO", [
("Camminata", "30–45 min", "Passeggiata senza trasformarla in un allenamento intenso."),
("Mobilità", "8–10 min", "Movimenti dolci per caviglie, anche e gambe."),
("Nota", "—", "Niente pesi oggi: il recupero è parte del programma.")
]),
("GIORNO 5 — GAMBE COMPLETE C", [
("Riscaldamento", "5–7 min", "Come Giorno 1."),
("Squat", "3 × 12", "4 kg per mano (8 kg totali)."),
("Hip thrust", "4 × 12", "10 kg su un solo manubrio."),
("Reverse lunges", "3 × 10/gamba", "3 kg per mano (6 kg totali)."),
("Sumo squat", "3 × 12–15", "8–10 kg su un solo manubrio."),
("Abduzioni", "3 × 20", "Elastico."),
("Calf raises", "3 × 20", "5 kg per mano (10 kg totali)."),
("Recupero", "60–90 s", "Mantieni una tecnica pulita.")
]),
("GIORNO 6 — CAMMINATA", [
("Camminata", "40–60 min", "Ritmo moderato. Puoi dividerla in due uscite."),
("Movimento leggero", "5–10 min", "Qualche minuto di mobilità o semplicemente muoverti durante la giornata.")
]),
("GIORNO 7 — RIPOSO", [
("Riposo", "—", "Nessun allenamento programmato."),
("Movimento", "Facoltativo", "Una passeggiata tranquilla va bene se ti fa stare meglio."),
("Recupero", "—", "Dormi bene e riprendi il ciclo la settimana successiva.")
])
]
for idx, (day, rows) in enumerate(days):
story.append(Paragraph(day, h1))
data = [["Attività", "Serie/tempo", "Indicazioni"]] + [[a,b,c] for a,b,c in rows]
tbl = Table(data, colWidths=[4.0*cm, 3.0*cm, 10.0*cm], repeatRows=1)
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.lightgrey),
("TEXTCOLOR", (0,0), (-1,0), colors.black),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 8.5),
("LEADING", (0,0), (-1,-1), 11),
("VALIGN", (0,0), (-1,-1), "TOP"),
("GRID", (0,0), (-1,-1), 0.35, colors.grey),
("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.white, colors.whitesmoke]),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
]))
story.append(tbl)
story.append(Spacer(1, 8))
story.append(PageBreak())
story.append(Paragraph("NOTE IMPORTANTI", h1))
notes = [
"I carichi sono punti di partenza, non obblighi. Se una serie è troppo facile, aumenta di 1–2 kg totali alla sessione successiva; se la tecnica peggiora, diminuisci.",
"Non fare massaggi aggressivi, coppettazione o strumenti che lasciano lividi, soprattutto perché hai riferito di avere facilità a sviluppare lividi.",
"Il programma può migliorare tono muscolare e aspetto generale, ma non elimina i capillari già dilatati né garantisce la scomparsa della cellulite in una settimana.",
"Evita allenamenti pesanti se compare dolore insolito, gonfiore improvviso di una gamba, arrossamento/calore marcato o altri sintomi nuovi.",
"Per la vacanza: negli ultimi 1–2 giorni evita di fare un allenamento gambe massacrante. Meglio arrivare recuperata."
]
for n in notes:
story.append(Paragraph("• " + n, body))
story.append(Spacer(1, 5))
doc.build(story)
print(path)
To embed this project on your website, copy the following code and paste it into your website's HTML: