Quotation PDF — an A4 quotation, built in your browser
A Malaysian quotation with your business name, a numbered item table, discount, SST and a validity date — one PDF, printed from your own tab.
🔒 100% client-side · zero server upload
PNG, JPEG or WebP, scaled to fit 120 × 48 pt beside your business name. A transparent background stays transparent on white paper.
Your business details, logo and defaults are saved in this browser only — this page has no server, and nothing here is ever uploaded. Customer details and line items are never saved.
Nothing downloads until you press Run: the PDF engine is about 175 KB, cached after the first use. A quotation with Chinese characters also needs a font file — 1.3 MB, or about 705 KB if your server compresses it — downloaded once, and only when the document actually contains Chinese. An English or Malay quotation downloads no font at all.
The PDF itself
The preview appears once the form has an item and a valid date.
This is the file you will download, drawn by the same engine — not a picture of one.
Worth a second look
Lines left out
Malaysian rules & edge cases
Quotation, tax invoice, e-Invoice — three different documents
A quotation is an offer. It is not a demand for payment, it is not a tax invoice, and it is not an LHDN e-Invoice. Most arguments about a Malaysian quotation start with somebody treating one as the others, so the table below is the difference in the customer's own terms:
| Quotation | Tax invoice | LHDN e-Invoice |
|---|---|---|
| An offer of a price for work not yet agreed | The bill for work already supplied | A tax invoice that IRBM/LHDN has validated and given a unique identifier |
| Before the customer accepts — it is what they accept | When the goods or services are supplied, not when the quotation was written | Submitted through MyInvois before it reaches the buyer, once your phase applies to you |
| Carries a validity date, not a payment due date | Carries a payment due date and is a demand for payment | Carries a validation link and a QR code the buyer can check |
| Shows SST only as what would be charged if you are registered | Shows the SST actually charged, with your SST registration number | Shows the same tax fields, in LHDN’s own structure |
What this tool does with SST
- The rate is the published rate. Service tax is 8% at the standard rate and 6% for the four reduced categories (food and beverage, logistics, telecommunications, parking), effective 2024-03-01, read from the same table the SST calculator uses. Sales tax is not added here: a retailer does not charge it at the till.
- Discount comes first, then SST. This tool applies the discount to the subtotal and charges service tax on the discounted amount — that is what the customer actually pays. If your accountant wants tax on the pre-discount value, put the discounted amount through the SST calculator and type the result here.
- Every line is rounded to the sen, by this tool. Quantity × unit price is rounded half-up to the nearest sen on integer arithmetic, then summed. A supplier's accounting system may differ by a sen; the page states the rule rather than hiding it.
- Only add SST if you are registered. Whether a supply is taxable, and which category it falls in, is JKDM MySST guidance — this page does the arithmetic, it does not decide your registration status. An unregistered business that prints service tax has created a document it cannot defend.
What a quotation needs to be useful
- A number and a date. "Q-2026-0118 dated 9 Nov 2026" is a document a customer can find again; "the quotation we discussed" is not.
- Your registered name, and the SSM registration number if you have one — the buyer's finance clerk will ask for it before paying.
- Itemised, not a lump sum. Description, quantity, unit price. The line that says "wiring | 3 phase | 1 | 1,200" is the line that survives a dispute.
- A validity date. Malaysian practice, not law: quotations are usually open 14 to 30 days, and a price quoted before a tax or material change should not be open-ended.
- One currency. This tool prints MYR, SGD or USD as a label and never converts between them — an exchange rate typed into a quotation is a number nobody can audit later.
Chinese text. A quotation that contains Chinese characters downloads a font subset (WenQuanYi Micro Hei, Apache-2.0) — 1.3 MB on the wire, about 705 KB with gzip — so the characters are really in the PDF instead of silently dropped. The PDF embeds that whole font, so a Chinese quotation comes out around 760 KB — a Latin-only one is a few KB. An English or Malay quotation downloads no font at all. Pressing Run downloads the PDF engine once (about 175 KB, cached by the browser afterwards) in every language; that and the front-end script are the only code this page ever fetches. A character the subset does not contain — a rare hanzi outside 《通用规范汉字表》, an emoji — is refused with the character named, never drawn as a blank box. Chinese punctuation is all included.
Before and after
Before
Monthly maintenance service | 2 | RM seratus
Pemasangan pendawaian | 3 phase | 1 | 12.345
Servis penyelenggaraan bulanan, 12 months | 12 | 420.00 After
L1 refused · the unit price is not a number
L2 refused · the unit price has more than 2 decimals
1 item · Subtotal RM 5,040.00 · TOTAL RM 5,443.20 How it works
- Fill in your business name, the customer and the quotation fields — the date is filled with today by your browser, not by the build.
- Paste the line items into the Input pane, one per line: description | qty | unit price. Choose the currency, the discount and the SST mode above the panes.
- Press Run, then download the PDF. Copy result copies the totals as text, and every refused line is listed with its line number.
FAQ
Is this a tax invoice or an LHDN e-Invoice?
No. A quotation is an offer of a price: it carries no SST registration number, it is not a demand for payment, and it is never submitted to MyInvois. Switch the document type to Invoice and the same numbers become a demand for payment — still not an LHDN e-Invoice, and still submitted nowhere. The footer of every page says which one you are holding.
Does my quotation need SST?
Only if you are registered for service tax. The menu offers the standard 8% and the reduced 6% rate, both read from the published table; if you are not registered, leave it on "No SST". Whether your particular service is taxable is JKDM's call, not this page's.
Why was one of my lines refused?
Each line must be description | qty | unit price, with a quantity above zero and a price with at most two decimals. A line with RM typed into the price cell, three decimals, or only one separator is listed with its line number and the exact reason — it is never dropped silently and never guessed at.
Is my quotation uploaded anywhere?
No. The PDF is written by pdf-lib inside this tab, and the tab has no upload endpoint to call. The only request the page can make is for its own font file, and only when the document contains Chinese characters. Your own business details ARE remembered — business name, registration number, address, contact line, logo and your defaults, in this browser's localStorage on this device, so the next document starts with the letterhead filled in. The customer and the item lines are never saved, and "Forget my details" deletes everything it kept.
Can I use it for a foreign customer?
Yes — pick SGD or USD and the amounts print with that label. Nothing is converted: type the prices in the currency you are quoting, because a rate this tool invented would be a number neither of you could check later.