Invoice Generator

Fill in a form and download a clean A4 PDF invoice with line items, tax and your logo. The draft is kept in your own browser, not on a server.

🌐 Español

From (your business)
Bill to (your client)
DescriptionQtyUnit priceAmount
$0.00
Subtotal$0.00
Tax (0%)$0.00
Total$0.00

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

From a blank form to a numbered PDF

  1. Fill in From (your business) and Bill to (your client). Each block takes a name, a multi-line address and an email address.
  2. Set Invoice #, Invoice date, Due date, Currency and Tax rate (%). An empty invoice number or date prints a dash placeholder rather than a gap, so nothing looks accidentally blank.
  3. Add rows with + Add line item, filling in Description, Qty and Unit price. The Amount column updates as you type, and the last remaining row cannot be removed.
  4. Optionally add Notes (optional) for payment terms, and a Logo (PNG or JPG, optional), which appears at the top right of the first page.
  5. Click Generate PDF. The file downloads as invoice-<your number>.pdf, or simply invoice.pdf if you left the number empty. Clear draft wipes the form and the saved copy when you are done.

Cents first, so the subtotal cannot drift

Money maths in a browser is the classic place to get bitten by binary floating point. This tool converts each line to whole cents at the earliest possible moment: quantity multiplied by unit price, rounded once to the nearest cent, and only then added up. The subtotal is a sum of integers, the tax is that integer subtotal multiplied by your rate and rounded once, and the total is two integers added together.

The difference is easy to demonstrate. Thirty lines of ten cents summed as floating-point dollars gives 3.0000000000000013, which then has to be rounded and hoped for; summed as cents it gives exactly 300, which is $3.00 and nothing else. On a realistic invoice, 12.5 hours at $64.00 plus a single $250.00 item gives a subtotal of $1,050.00, and 8.25% tax on that comes to $86.63, because 8662.5 cents rounds up rather than truncating. Total $1,136.63. Add fifty more lines and the arithmetic still cannot drift, because there is nothing fractional left to accumulate error.

What the draft remembers, and what it forgets

Every field, every line item, your currency and your tax rate are written to this browser’s own storage on each change and read back when you return. There is no save button, no account and no upload; the invoice details never reach a server because there is no server involved in building the file. Come back next month to bill the same client and the form is already populated.

The logo is the deliberate exception. Image files run from a few hundred kilobytes to several megabytes, and the per-site storage a browser hands out is small and shared with everything else the site keeps. Duplicating a logo into it for convenience is a poor trade, so the image is held in memory for the current session only and has to be re-selected next visit. The picker takes PNG or JPG, and the format is decided from the file’s extension: a PNG saved with a .jpg name will be handed to the JPEG decoder and generation will fail, so rename it properly rather than trusting the picker.

24 rows on page one, 39 after that

Long invoices continue onto further pages automatically. The first page carries the title, both party blocks and the invoice metadata, which leaves room for 24 line items. Continuation pages carry only a compact heading reading “Invoice ABC-123 (continued)” plus the column headers, so they hold 39. A 100-row invoice therefore splits 24, 39 and 37 across three pages, with the subtotal, tax and total block appearing once, under the final row.

Those budgets shrink when you use the Notes field, because the footer’s height is reserved on every page rather than only the last one. A two-line note takes the first page down to 20 rows and later pages to 35. That is a simplification, and it costs a little space on the pages that turn out not to be last, in exchange for a guarantee that the totals block can never overflow the bottom of a page. Given the alternative is an invoice whose total falls off the sheet, it is a trade worth making.

Currency symbols come from one locale

Eight currencies are offered: US dollar, euro, British pound, Canadian and Australian dollars, Japanese yen, Mexican peso and Indian rupee. Each renders with its real symbol, and the Mexican peso correctly disambiguates itself as MX$. What the formatter does not do is switch number conventions per country, because it is pinned to a single English locale: a euro amount prints as €1,234.56, with a comma for thousands and the symbol in front, not as the 1.234,56 € form used across much of the eurozone. Yen behaves as yen should and prints whole units with no decimal places.

If a client needs the total spelled out in words for a contract, the Number to Words Converter will do it, though you have to switch its mode from the default cardinal setting to Currency to get the “dollars and cents” phrasing. For hourly work, the Timesheet Calculator totals the week’s decimal hours you then paste into the Qty column here.

After the PDF exists

The generated file is an ordinary PDF, so the rest of the toolkit applies to it. Add a scanned signature with Sign a PDF, which places your signature image on the last page by default, exactly where an invoice wants it. Put a password on a sensitive one with Password Protect a PDF, or bind the invoice to a report or a timesheet using Merge PDF Files before sending a single attachment.

One thing this generator does not claim to be is a compliance tool. It produces a clean, readable invoice with the fields most freelancers use daily, but it does not model any country’s rules on sequential numbering, mandatory tax identifiers or structured e-invoicing formats. If your jurisdiction imposes those, check with an accountant, and use the Notes field for a VAT or tax number in the meantime.

See it in action

Screenshot of the Invoice Generator tool with an invoice form with sender and client blocks, invoice number and dates, and line items, laid out beside a live preview of the document it produces - the only file it takes is an optional logo
Invoice Generator mid-process: an invoice form with sender and client blocks, invoice number and dates, and line items, laid out beside a live preview of the document it produces - the only file it takes is an optional logo.
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

Can I switch the invoice to US Letter or add my own page size?

Not currently. The page size is fixed at A4 in the layout code, and both the column widths and the rows-per-page budget are derived from it. A4 is narrower but taller than US Letter, so a Letter printer will normally scale the page down slightly to fit unless you tell it not to. The calendar and graph paper generators on this site do offer a Letter option; the invoice layout does not.

My client's name is in Cyrillic or Japanese and generation fails. What is going on?

The PDF uses the built-in Helvetica font, which can only encode the Latin-1 character set, so accented European names work but Cyrillic, Greek, Japanese, Chinese and emoji cause the build to stop. The message shown blames the logo file, which is misleading in this case; the real cause is a character the font cannot represent. Removing or transliterating that character lets the invoice generate.

Where exactly is the auto-saved draft kept, and how do I get rid of it?

In this browser's localStorage, under a single key holding the whole form as JSON, rewritten on every keystroke once the page has loaded. The Clear draft button blanks the form and removes that key, although the auto-save writes it straight back holding the now-empty form, so nothing you typed survives it. Clearing your browser's site data removes the key entirely. Nothing about the draft is sent anywhere, and no other site can read it.

Do the totals on screen always match the ones in the PDF?

Yes, because both are produced by the same function on the same numbers. The on-page summary is not an estimate that the PDF later recalculates; it calls the identical rounding and summing code, so what you see before clicking is what the file will contain. The line Amount cell in the table is computed the same way too.

Do line breaks in the Notes box survive into the PDF?

No. Notes are re-flowed as a single paragraph wrapped to the page width, because the wrapper splits on whitespace of any kind, so the newlines you typed vanish. Bank details laid out over three lines will come out as one run of text. Separating items with a semicolon or a dash reads better in the PDF than relying on line breaks.

What happens if my address needs more than four lines?

Only the first four non-blank lines of each address block are printed, and anything after that is silently dropped. The cap exists so the header height is fixed and the rows-per-page maths stays predictable. Any line too wide for its column is also shortened with an ellipsis rather than overlapping the block beside it, so put an overflowing suite or registration number in the Notes field instead.

Related tools