Certificate Maker

Create award or completion certificates, name, date, signature, border design, logo. Export PDF or PNG, or batch a class from CSV. Free, private, no upload.

🌐 Español

Recipient
Certificate
Signature line
Logo

Batch mode: whole class from a CSV

Upload a CSV with a "Name" column (aliases like "Recipient" or "Student Name" also work) and, optionally, a "Date" column to override the date above per row. Every certificate uses the same title, description, design, signer, and images you set above — only the recipient (and date, if provided) changes per row.

Batch mode always downloads PDF files (one per recipient, zipped) regardless of the PDF/PNG choice above — the simplest, most print-friendly output for a whole class or team.

🔒 Private by design: everything runs locally in your browser and never uploaded to any server.

The one-page layout, and the two things it decides for you

Every certificate comes out as a single landscape A4 page, 842 by 595 points, which is the orientation a framed award has used since long before anyone printed one from a browser. The vertical stack is fixed: logo band at the top, the certificate title, a line of italic text reading “This certificate is proudly presented to”, the recipient’s name in large type, then the optional description, then a footer with two ruled columns for the date and the signature.

Typography is deliberately not configurable. The title sets in Times Bold at 28 points in the border design’s accent colour, the recipient’s name in Times Bold Italic at 34 points, the description in Helvetica at 12 points, and the footer in Helvetica Bold at 12 points with a 10 point line for the signer’s job title. Those pairings are the ones that look like a certificate rather than a memo, and exposing font pickers is the fastest way to let someone build something that does not.

Two behaviours are worth knowing before you type. In the PDF, the title and the recipient’s name are each held to one line and truncated with an ellipsis if they exceed the 682 point content width, so a name that runs to five words is cut rather than shrunk or wrapped. The PNG export does no truncation at all, so an over-long name there simply overflows the border on both sides; that is one more reason to keep the name field to a name. The description is the only field that wraps, at 16 points per line, so put anything long there (“for outstanding contribution to the 2026 summer reading programme”) and keep the name field to a name.

What each border design actually draws

The three designs are not colour swaps of the same frame:

A logo, if you upload one, is centred just under the top border and scaled to fit inside 130 by 50 points with its aspect ratio kept, so a wide wordmark and a square crest both land sensibly. A signature image is scaled to fit about 70 percent of its footer column and no more than 42 points tall, and it sits directly above the rule so the printed result reads as a signature over a signature line. Leave it empty and the line stays clear for an ink signature after printing. If you have no image file, Signature Generator will draw one from your mouse or a typed script font and hand you a transparent PNG.

Filling in the form

  1. Enter the Recipient name and Date. The date is a free text field on purpose, so “May 1, 2026”, “01/05/2026” and “Spring term 2026” are all acceptable.
  2. Set the Certificate title, which defaults to “Certificate of Achievement”, and an optional Description.
  3. Pick a Border design.
  4. Fill in Signer name and Signer title, and optionally upload a Signature image. With no signer name the footer prints “Authorized Signature”.
  5. Optionally upload a Logo, choose PDF or PNG under Download as, and click Generate certificate.

Batch mode: one template, one roster, one ZIP

Below the single-certificate form there is a CSV upload that reuses everything above as a shared template and varies only the recipient. The roster is read by the same parser that powers our CSV Viewer, which means quoted fields and embedded commas behave correctly, so “Doe, Jane” in a single cell does not silently become two people.

Upload the file and the count of recipients found appears immediately, before you generate anything, which is the moment to notice that thirty-one names became twenty-nine because two rows had an empty name cell. Generating then builds one PDF per row with a live percentage, and bundles them with our own ZIP writer into a file named after the timestamp, for example certificates-2026-07-30_14-30-05.zip. Each entry inside is named after its recipient, so certificate-Jane-Doe.pdf drops straight into an email or a print queue.

Where this earns its keep is the class of thirty: one design decision, one signature image, one description, and thirty documents that are genuinely identical apart from the name. The alternative, mail-merging a slide deck, tends to reflow the layout on the one name that is longer than the rest.

PDF or PNG, and why they are not pixel-identical

The PDF is built with pdf-lib, drawing real vector text and embedded standard fonts, which is what you want for anything that will be printed or archived. The PNG takes the same layout numbers and draws them onto a canvas at twice scale, giving a 1684 by 1191 pixel image that stays sharp in a slide, a web page or a Notion doc.

They are close but not the same file rendered twice. The PDF embeds Helvetica and Times; the canvas asks the browser for Georgia with Times New Roman as a fallback and Arial for the body text, and measures line breaks with canvas metrics rather than pdf-lib’s. So a long description can break one word differently between the two. Pick the format you actually need and generate that one, rather than proofing in PNG and printing the PDF.

The trade also runs the other way, which is the answer to the non-Latin name problem: canvas will happily render any script your operating system has a font for, while the PDF’s standard fonts cannot encode outside Latin-1.

What a generated certificate is not

It is a document, not a credential. Nothing here checks that the recipient did the thing, and there is no serial number, QR code or verification page, so it carries exactly the authority of the organisation whose name and logo you put on it. If you need something auditable, you need a register somewhere that this tool deliberately does not have, because keeping one would mean keeping your roster on a server. Everything above is assembled in the tab you are reading this in, which is also why a class list you upload for batch mode is never transmitted anywhere. For the neighbouring paperwork jobs, Invoice Generator and Label Maker follow the same pattern.

See it in action

Screenshot of the Certificate Maker tool with recipient name and date, certificate title and optional description, with border designs from a classic navy double rule to a minimal modern frame, previewed as the printable certificate
Certificate Maker mid-process: recipient name and date, certificate title and optional description, with border designs from a classic navy double rule to a minimal modern frame, previewed as the printable certificate.
Diagram: where the work happens on a SysFenix page that has no file input at all: the tool arrives as ordinary JavaScript inside the page, works the answer out on your own device and renders it in place, so the upload, queue and server-side record a typical online tool needs never happen
Where the work happens on a SysFenix page that has no file input at all: the tool arrives as ordinary JavaScript inside the page, works the answer out on your own device and renders it in place, so the upload, queue and server-side record a typical online tool needs never happen.

Frequently asked questions

What exactly does my roster CSV need to look like?

The first row must be a header row containing a column called Name, or one of its accepted aliases (Recipient, Recipient Name, Student, Student Name, Full Name). An optional Date column (or Completion Date, Award Date) overrides the shared date per row. Rows with an empty name cell are skipped rather than treated as errors, so the trailing blank line every spreadsheet export leaves behind is harmless.

Why did my CSV upload fail?

Almost always because no header cell matched a recognised name column, and the error message lists the column headings it actually found so you can see the mismatch. A common cause is exporting with the header row hidden or starting the sheet with a title row above the headings; delete that row and re-export.

A recipient name in Chinese or Cyrillic will not generate. Why?

The PDF path embeds the standard Helvetica and Times families, which can only encode Latin-1 characters, so a name outside that range fails to draw and you get the generic generation error. Accented Western European names are fine. For other scripts, switch Download as to PNG, which draws through the browser's own font stack and handles them correctly, one certificate at a time.

Why does batch mode ignore my PNG choice?

Batch mode always writes PDFs, one per recipient, zipped together. It is a deliberate simplification, since printing thirty certificates is the reason batch mode exists, and PDF is the format that prints predictably and opens on every machine in a staff room. Generate a single certificate above if you specifically need a PNG.

What if two people on my roster have the same name?

Both certificates are still generated. Filenames are made unique before going into the ZIP, so the second Jane Doe becomes a numbered variant rather than silently overwriting the first. Filenames also strip anything outside letters, digits, hyphens and underscores, so accented characters vanish from the filename even though they render correctly inside the document.

Is this certificate accredited or verifiable?

No. It produces a well laid out document containing exactly the text and images you supply, with no credential check, no institutional seal, no serial number and no verification URL. Treat it as the printed award a teacher, trainer or manager hands over in person, which is the job it was built for.

Related tools