Tag not monitored by Microsoft.
Hi Sami Ullah,
This script is based on your post so I hope it helps.
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import mm
import argparse
import os
def generate_study_plan_pdf(file_path):
c = canvas.Canvas(file_path, pagesize=A4)
width, height = A4
# Title
c.setFont("Helvetica-Bold", 16)
c.drawString(30, height - 50, "SOPE 2028 – Weekly Study Plan (Science/Engineering Background)")
# Table headers
c.setFont("Helvetica-Bold", 12)
c.drawString(30, height - 80, "Day")
c.drawString(100, height - 80, "Subjects & Activities")
c.drawString(450, height - 80, "Done")
# Weekly data
study_data = [
("Monday", "Maths & Stats (2 hrs): Algebra, Probability, Calculus\nEssay (30 min): Outline practice"),
("Tuesday", "International Relations (2 hrs): Theories, Cold War, Current IR Issues\nEnglish Grammar (30 min): Precis + Comprehension"),
("Wednesday", "General Knowledge (2 hrs): Pakistan Affairs + Islamiat\nEveryday Science (30 min): Short notes"),
("Thursday", "Maths & Stats (2 hrs): Past paper questions, timed solving\nOffice Management-I (30 min): HRM / IT / Rules"),
("Friday", "International Relations (2 hrs): Foreign Policy, UN, Current Affairs\nEssay (30 min): Write one full essay"),
("Saturday", "Office Management-II (2 hrs): Civil Servants Act, Rules of Business, PPRA\nEnglish (30 min): Grammar, vocab, correction"),
("Sunday", "Morning (2 hrs): Weekly revision\nEvening: Attempt 1 past paper (exam conditions)")
]
y = height - 110
for i, (day, activities) in enumerate(study_data):
c.setFont("Helvetica", 10)
c.drawString(30, y, day)
text_obj = c.beginText(100, y)
for line in activities.split('\n'):
text_obj.textLine(line)
c.drawText(text_obj)
# Checkbox
c.acroForm.checkbox(
name=f"done_{i}",
tooltip="Mark as done",
x=450,
y=y - 2,
size=12,
borderColor=None,
fillColor=None,
textColor=None,
forceBorder=False
)
y -= 50
# Monthly Goals
c.setFont("Helvetica-Bold", 12)
c.drawString(30, y - 20, "📌 Monthly Goals")
goals = [
"1 Essay per week → 4 essays / month",
"Maths & Stats practice → 30–40 questions per month",
"IR / Economy → 1 major topic per week",
"GK / Islamiat / Science → Daily 15–20 min MCQ prep",
"Every 3 months → Full mock exam (compulsory + optional)"
]
y -= 50
for i, goal in enumerate(goals):
c.drawString(50, y, goal)
c.acroForm.checkbox(
name=f"goal_{i}",
tooltip="Goal completed",
x=30,
y=y - 2,
size=12
)
y -= 30
c.save()
print(f"✅ PDF generated: {file_path}")
# CLI support
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Generate SOPE 2028 Weekly Study Plan PDF")
parser.add_argument("--output", type=str, default="SOPE_2028_Weekly_Study_Plan_with_Checkboxes.pdf",
help="Path to save the PDF file")
args = parser.parse_args()
output_path = os.path.abspath(args.output)
generate_study_plan_pdf(output_path)
How to Use
Save the script as generate_sope_plan.py.
Run it from the terminal: If you have any issues double check all your location and for typing errors.
python generate_sope_plan.py --output "C:/Users/YourName/Desktop/SOPE_2028_Plan.pdf"