Education

Report card PDF generator

A term progress report with subject marks and grades, attendance, teacher remarks and signatures.

Produce clean, consistent report cards at the end of every term. This template shows the student details and attendance, a subject table with marks, grades and remarks, the total, percentage and overall grade, the class teacher’s comments and signature lines.

Export marks from your school system or a spreadsheet and render a report card for every student in a class in one batch.

Generate a Student Report Card PDF via the API

POST your data to /api/v1/generate and get a PDF back. Copy-paste an example, swap in your API key, and loop over a list to render thousands — one student report card per record.

curl -X POST https://pdfgen.com/api/v1/generate \
-H "Authorization: Bearer pdfg_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"data": {
"school": {
"name": "Riverside International School",
"address": "Sector 21, Dwarka, New Delhi 110077"
},
"term": "Term 1 · Academic year 2026–27",
"student": {
"name": "Aarav Singh",
"className": "Grade 8 – B",
"rollNumber": "14"
},
"attendance": "96% (92 of 96 days)",
"subjects": [
{
"name": "English",
"max": 100,
"marks": 88,
"grade": "A2",
"remarks": "Expressive, confident writer"
},
{
"name": "Mathematics",
"max": 100,
"marks": 94,
"grade": "A1",
"remarks": "Excellent problem solving"
},
{
"name": "Science",
"max": 100,
"marks": 85,
"grade": "A2",
"remarks": "Strong in practical work"
},
{
"name": "Social Studies",
"max": 100,
"marks": 79,
"grade": "B1",
"remarks": "Should revise map work"
},
{
"name": "Hindi",
"max": 100,
"marks": 82,
"grade": "A2",
"remarks": "Good reading fluency"
},
{
"name": "Computer Science",
"max": 50,
"marks": 47,
"grade": "A1",
"remarks": "Very good at coding tasks"
}
],
"total": 475,
"maxTotal": 550,
"percentage": "86.4",
"overallGrade": "A2",
"teacherRemarks": "Aarav is attentive and curious in class and takes part eagerly in discussions. He should keep up his steady effort in Social Studies to match his excellent results in Mathematics and Computer Science."
},
"format": "A4",
"engine": "handlebars",
"html": "<div style=\"max-width:760px;margin:0 auto;padding:44px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:#111827;font-size:13px;\">\n <div style=\"text-align:center;border-bottom:3px double #1e3a8a;padding-bottom:14px;margin-bottom:20px;\">\n <h1 style=\"font-size:24px;font-weight:800;margin:0;color:#1e3a8a;\">{{school.name}}</h1>\n <p style=\"margin:4px 0 0;font-size:12px;color:#6b7280;\">{{school.address}}</p>\n <p style=\"margin:12px 0 0;font-size:14px;font-weight:800;letter-spacing:3px;\">PROGRESS REPORT</p>\n <p style=\"margin:2px 0 0;font-size:12px;color:#6b7280;\">{{term}}</p>\n </div>\n <table style=\"width:100%;border-collapse:collapse;margin-bottom:18px;font-size:inherit;line-height:inherit;\">\n <tr>\n <td style=\"padding:8px 10px;border:1px solid #e5e7eb;\"><span style=\"color:#9ca3af;\">Student</span><br><strong>{{student.name}}</strong></td>\n <td style=\"padding:8px 10px;border:1px solid #e5e7eb;\"><span style=\"color:#9ca3af;\">Class</span><br><strong>{{student.className}}</strong></td>\n <td style=\"padding:8px 10px;border:1px solid #e5e7eb;\"><span style=\"color:#9ca3af;\">Roll no.</span><br><strong>{{student.rollNumber}}</strong></td>\n <td style=\"padding:8px 10px;border:1px solid #e5e7eb;\"><span style=\"color:#9ca3af;\">Attendance</span><br><strong>{{attendance}}</strong></td>\n </tr>\n </table>\n <table style=\"width:100%;border-collapse:collapse;font-size:inherit;line-height:inherit;\">\n <thead>\n <tr style=\"background:#1e3a8a;color:#fff;text-align:left;\">\n <th style=\"padding:9px 10px;\">Subject</th>\n <th style=\"padding:9px 10px;text-align:center;\">Max</th>\n <th style=\"padding:9px 10px;text-align:center;\">Marks</th>\n <th style=\"padding:9px 10px;text-align:center;\">Grade</th>\n <th style=\"padding:9px 10px;\">Remarks</th>\n </tr>\n </thead>\n <tbody>\n {{#each subjects}}\n <tr>\n <td style=\"padding:9px 10px;border-bottom:1px solid #e5e7eb;font-weight:600;\">{{name}}</td>\n <td style=\"padding:9px 10px;border-bottom:1px solid #e5e7eb;text-align:center;color:#6b7280;\">{{max}}</td>\n <td style=\"padding:9px 10px;border-bottom:1px solid #e5e7eb;text-align:center;font-weight:700;\">{{marks}}</td>\n <td style=\"padding:9px 10px;border-bottom:1px solid #e5e7eb;text-align:center;\"><span style=\"background:#eff6ff;color:#1e40af;border-radius:4px;padding:2px 8px;font-weight:700;\">{{grade}}</span></td>\n <td style=\"padding:9px 10px;border-bottom:1px solid #e5e7eb;color:#6b7280;\">{{remarks}}</td>\n </tr>\n {{/each}}\n </tbody>\n </table>\n <div style=\"display:flex;gap:10px;margin:18px 0;\">\n <div style=\"flex:1;background:#f9fafb;border-radius:8px;padding:12px;text-align:center;\"><p style=\"margin:0;font-size:11px;color:#6b7280;\">Total</p><p style=\"margin:4px 0 0;font-size:17px;font-weight:800;\">{{total}} / {{maxTotal}}</p></div>\n <div style=\"flex:1;background:#f9fafb;border-radius:8px;padding:12px;text-align:center;\"><p style=\"margin:0;font-size:11px;color:#6b7280;\">Percentage</p><p style=\"margin:4px 0 0;font-size:17px;font-weight:800;\">{{percentage}}%</p></div>\n <div style=\"flex:1;background:#1e3a8a;color:#fff;border-radius:8px;padding:12px;text-align:center;\"><p style=\"margin:0;font-size:11px;opacity:.85;\">Overall grade</p><p style=\"margin:4px 0 0;font-size:17px;font-weight:800;\">{{overallGrade}}</p></div>\n </div>\n <p style=\"font-size:11px;text-transform:uppercase;letter-spacing:1.5px;color:#9ca3af;font-weight:700;margin:0 0 8px;\">Class teacher'\''s remarks</p>\n <p style=\"margin:0;line-height:1.65;color:#374151;\">{{teacherRemarks}}</p>\n <div style=\"display:flex;gap:28px;margin-top:56px;font-size:12px;color:#6b7280;text-align:center;\">\n <span style=\"flex:1;border-top:1px solid #9ca3af;padding-top:4px;\">Class teacher</span>\n <span style=\"flex:1;border-top:1px solid #9ca3af;padding-top:4px;\">Principal</span>\n <span style=\"flex:1;border-top:1px solid #9ca3af;padding-top:4px;\">Parent / guardian</span>\n </div>\n</div>"
}' --output report-card.pdf

Working in another language? Follow a full guide for your stack:

What you can build

  • Schools printing term report cards for every class
  • Tutoring centres sending progress reports to parents
  • School management systems adding PDF report cards
  • Online courses issuing graded progress reports

Frequently asked questions

Can I generate report cards for a whole class at once?
Yes — loop over your students and call /api/v1/generate with each student’s marks. A class of 40 becomes 40 PDFs in one run.
Can I use my own grading scale?
Yes. Grades and remarks are values you pass, so any scale works — letters, CBSE-style A1/B2 grades, percentages or GPA.
Can I add the school logo?
Yes — ask the AI to add a logo to the header, or edit the template and pass the logo URL in your data.

Related templates

Ship your student report card PDF endpoint today

Generate this template with AI, tweak it to match your brand, then render at scale with a single API call — no headless browsers to babysit.