Skip to main content
L
Loopaloo
Buy Us a Coffee
All ToolsImage ProcessingAudio ProcessingVideo ProcessingDocument & TextPDF ToolsCSV & Data AnalysisConverters & EncodersWeb ToolsMath & ScienceGames
Guides & BlogAboutContact
Buy Us a Coffee
L
Loopaloo

Free online tools for developers, designers, and content creators. Your files are processed in your browser and are never uploaded - no accounts required. A few network utilities (like What's My IP and Currency Converter) call public APIs to do their job and say so on their pages.

support@loopaloo.com

Tool Categories

  • Image Tools
  • Audio Tools
  • Video Tools
  • Document & Text
  • PDF Tools
  • CSV & Data
  • Converters
  • Web Tools
  • Math & Science
  • Games

Company

  • About Us
  • Contact
  • Blog
  • FAQ

Legal

  • Privacy Policy
  • Terms of Service
  • Disclaimer

Support

Buy Us a Coffee

© 2026 Loopaloo. All rights reserved. Built with privacy in mind.

Privacy|Terms|Disclaimer
  1. Home
  2. Web Tools
  3. Invoice Generator
Add to favorites

Invoice Generator

Build an invoice whose figures add up. Amounts on integers in the currency own ISO 4217 minor unit, fractional quantities, the discount taken before tax, and a PDF that gets written whatever alphabet the client name is in.

Runs locally in your browserMore web toolsJump to full guide

Related reading

  • Creating Professional Digital Invoices: A Complete Guide for Freelancers and Small Businesses11 min read

Initializing in your browser…

You might also like

Mock Data Generator

Generate fake data that is the thing it is labelled: card numbers with a real Luhn check digit, IBANs that pass ISO 7064 MOD 97-10, UUID v4 and v7 per RFC 9562, reserved e-mail and IP ranges, a seed so the same data comes back, and JSON, NDJSON, CSV or SQL output

Password Generator

Generate passwords from the Web Crypto generator by rejection sampling, with the entropy stated exactly from the alphabet, the cost of every rule computed, and crack times against four named attacker models

CSS Box Shadow Generator

Stack CSS box shadows with any colour notation, and never write a declaration the browser will drop: a layer that will not parse is left out and flagged rather than taking every other layer down with it

An invoice that adds up, in the currency it is written in

Build an invoice whose figures add up. Every amount is computed on integers counting the currency own minor unit, so the printed lines add to the printed subtotal and the printed subtotal, discount and tax add to the printed total. The page checks that on every keystroke and says so. Nothing is uploaded: the PDF is written in your browser.

Key features

  • Every amount computed on integers counting the currency own ISO 4217 minor unit, so no figure passes through a float
  • The subtotal is the sum of the rounded line amounts, so the printed column adds up to the printed footer
  • A self check on every keystroke: the printed strings are read back and added again, and the result is shown
  • Decimal places from CLDR, so a yen invoice has none and a Bahraini dinar invoice has three
  • Fractional quantities to three places and unit prices to six, with the price printed at the precision it was given
  • The discount taken before tax by default, after tax when chosen by name, with the taxable amount stated
  • Show working: the product before rounding, how far rounding moved each line, and what the tax was charged on
  • Out of range values named rather than applied: a negative rate, a rate above 100, a negative discount, a discount larger than the subtotal
  • What a standard PDF font cannot draw, reported before the download, with the nearest Latin form substituted
  • Long descriptions wrapped inside their column instead of drawn over the money
  • A share link that carries the currency, the tax rate and the tax order

How to use

  1. 1Pick the currency. The page states how many decimal places it has and where that figure comes from.
  2. 2Add lines. A quantity may be fractional (2.5 hours) and a unit price may be finer than the currency (0.1425 a unit).
  3. 3Set the tax rate and any discount, and choose whether tax is charged before or after the discount.
  4. 4Read the check under the total: it says whether the printed figures add up, and Show working prints the rounding.
  5. 5Download the PDF. If anything you typed cannot be drawn with a standard PDF font the page tells you first.

Four things an invoice has to get right

**The first is that the column adds up.** Whoever pays an invoice adds the line amounts and checks them against the subtotal, then adds the subtotal and the tax and checks them against the total. A tool that keeps an unrounded figure and rounds each printed number independently produces a column that does not add up: the version of this tool that shipped before September 2026 printed three lines of $0.38 under a subtotal of $1.13, and on a measured corpus of twelve ordinary invoices, ten of eighteen printed lines did not equal their own printed quantity times their own printed unit price. Everything here is computed on integers counting the minor unit, and **the subtotal is the sum of the rounded line amounts** rather than the rounding of an unrounded sum, which is the only arrangement in which a column agrees with its own footer. The page re-reads its own printed strings, adds them again, and shows you the result of that check.

**The second is the number of decimal places, which belongs to the currency and is not always two.** ISO 4217 calls it the minor unit. The Japanese yen and the Korean won have none, the Bahraini and Tunisian dinar have three. The figure comes from CLDR through the browser own `Intl`, so a yen invoice reads ¥100 and not ¥100.00.

**The third is when the discount comes off.** A price discount granted to the customer at the time of supply is excluded from the taxable amount by article 79 of the EU VAT Directive, and US sales tax works the same way, so tax is charged on the discounted figure by default and the page names the amount it was charged on. Charging tax on the full subtotal instead overcharges by the tax on the discount: 2.00 on a 100 invoice with 20 percent tax and a 10 discount. The other order is offered, because a settlement discount or a third-party-funded one can genuinely fall outside the taxable supply, but it has to be chosen by name.

**The fourth is what a PDF can actually write.** A PDF drawn with one of the standard 14 fonts carries the WinAnsi encoding, which is 218 characters: printable ASCII, Latin-1, and 27 more. The Indian rupee sign is not among them, and neither is any Greek, Cyrillic or CJK letter, and pdf-lib throws rather than dropping a character. Measured across twelve ordinary invoices, five produced no file at all: a rupee invoice, and clients named in Polish, Greek, Chinese and Turkish, each ending in a bare "Failed to generate PDF". Now the page tells you what cannot be drawn BEFORE you click, substitutes the nearest Latin form where there is one, falls back from an unwritable currency symbol to its ISO 4217 code, which is always ASCII, and writes the file.

Quantities may be fractional to three decimal places, which is what an hourly invoice needs: 2.5 hours at 100 an hour bills 250, where reading the quantity with `parseInt` billed 200. A unit price may be finer than the currency, up to six places, because a per-unit rate genuinely is quoted below the minor unit, and the price is printed at the precision it was given while only the line amount is rounded. Show working prints the product before rounding, how far rounding moved each line, and what the tax was charged on.

Every figure the page produces is checked in the project tests against a second implementation of the arithmetic written in Python decimal from the same definitions: 146 invoices across four currencies and both tax orders in the module tests, and sixteen more driven through the browser, with no disagreements. What the PDF says is read back out of the file by two independent readers, poppler pdftotext and pypdf.

Examples

  • Where the penny goes

    Three lines of 3 units at $0.125 each. Each line is exactly $0.375 and prints as $0.38, and the subtotal is the sum of those three rounded amounts, $1.14. Rounding the unrounded $1.125 instead gives $1.13, which is a column of three $0.38 lines under a footer that disagrees with them.

  • When the discount comes off

    A $100 subtotal, 20 percent tax, a $10 discount. Tax on the discounted $90 is $18 for a total of $108. Tax on the full $100 is $20 for a total of $110. The page says which of the two it charged and on what amount.

Tips & best practices

  • Include payment terms (Net 15, Net 30) in the notes so there is no ambiguity about when payment is due.
  • Open Show working before sending an invoice a client is likely to query: it prints the product before rounding and where each penny went.
  • The share link carries the currency, the tax rate and the tax order, so a recurring client setup can be a bookmark.

Practical scenarios

  • Freelance billing by the hour

    A fractional quantity is the whole point: 2.5 hours at your rate bills 2.5 hours.

  • Invoicing in a currency that is not yours

    A yen invoice with two decimal places is wrong on its face. The decimal places come from the currency, not from a constant.

  • An invoice somebody is going to check

    The figures add up by construction, and Show working prints where each rounding went, so a query has an answer.

Frequently asked questions

Why does my line say $0.38 when 3 times $0.125 is $0.375?

Because an invoice is settled in whole minor units, and 0.375 is not one. That rounding cannot be avoided. What can be avoided is the subtotal disagreeing with the lines, and here the subtotal is the sum of the rounded amounts, so it agrees. Show working prints how far each line moved.

Should the discount come off before or after tax?

Before, in almost every case. A price discount granted at the time of supply is excluded from the taxable amount by article 79 of the EU VAT Directive, and US sales tax treats a cash or trade discount the same way. That is the default. Pick the other only for a discount that genuinely falls outside the taxable supply, such as one funded by a third party.

Why did the rupee symbol become INR in the PDF?

Because a PDF drawn with one of the standard 14 fonts carries the WinAnsi encoding, and the rupee sign was added to Unicode in 2010, long after that encoding was fixed. Rather than fail, the PDF writes the ISO 4217 code, which is ASCII and always writable. The screen keeps the symbol.

My client name is in Chinese and the PDF shows question marks.

A standard PDF font can draw 218 characters and no CJK, Greek or Cyrillic letter is among them. The page lists exactly which characters it cannot draw before you download, so nothing is a surprise. A name in a Latin script with accents or strokes is handled: it keeps its accents where WinAnsi has them and loses only the marks it does not.

Is the invoice data stored anywhere?

No. Everything stays in the page and the PDF is written in your browser. Nothing is saved between visits, so download each invoice before you close the tab.

Can I put my tax registration number on it?

There is no dedicated field, so put it in your address block or in the notes. If your jurisdiction requires one, check the invoice before sending it.

Related tools and how they differ

  • Currency Converter: The other half of the money question: what an amount is worth in another currency, rounded to that currency own minor unit.
  • Unit Converter: For the quantity rather than the price, with every factor derived from its defining constant.

Further reading

  • Creating Professional Digital Invoices: A Complete Guide for Freelancers and Small Businesses11 min read

Private by design

This runs as client-side JavaScript. Keys, tokens, payloads, and other inputs never leave your device.