Invoice Generator

Create an invoice and save it as PDF by printing: integer maths without floating-point errors, inclusive or exclusive tax, discount before or after tax, the amount in words in Arabic and English, and JSON export/import.

Workspace

How the result is calculated

All amounts are integers in minor units (cents, halalas…) using BigInt, with no floating point, and rounding is half-up at every step. Per line: base = round(price × quantity), then the line discount, then the overall “before tax” discount. Exclusive: tax = round(net × rate); inclusive: net = round(gross ÷ (1 + rate)) and tax = the difference. An “after tax” discount (% or fixed) is subtracted from the total. Decimals follow the currency (JPY=0, KWD/BHD/OMR=3, others 2). Formatting uses Intl.NumberFormat. The amount in words is in English (up to billions) and Arabic (up to 999,999,999) for specific currencies.

Limits: This is a “PDF invoice”, not an officially approved e-invoice: ZATCA and similar requirements (encrypted QR, sequencing, stamping) are not implemented. PDF is saved through the browser’s print (real text). The Arabic amount in words follows general rules and may need a linguistic review, available for USD, EUR, SAR, AED, EGP and KWD only. Clients are not stored between sessions (use JSON export). Review the maths yourself before sending to a client.

FAQ

Is it a tax-approved invoice?

No; it is an ordinary PDF invoice.

How do I save as PDF?

Press Print and choose “Save as PDF”.

Newest tools

Recently added free tools — they run in your browser without uploading your data

All tools →

Domain age (RDAP), first Wayback snapshot, DNS, SPF and DMARC records for up to 50 domains with a stated hygiene score and CSV

Public API

Check WebRTC and IPv6 leaks, time zone and language mismatches with the IP country, and the browser automation flag

Public API

See your IPv4, IPv6, approximate location, provider, ASN, address class (6to4/Teredo/private) and browser info

Public API

Generate a small HTML page that redirects visitors to a destination encoded in the #hash, with a delay, a message and a timestamp expiry

Local