Arabic invoices that print correctly
Arabic is a layout problem before it is a translation problem. Mirroring the page is the easy half; keeping the invoice number readable is the half that breaks templates.
You have seen it: an invoice where the number reads 2026/INV-00042 instead of INV-00042/2026, or an IBAN whose last group jumped to the front. Nothing is corrupted in the database — the text is being reordered as it is drawn, because the renderer is applying right-to-left rules to a string that is not Arabic.
Rule 1 — isolate every Latin and numeric string
Invoice numbers, IBANs, VAT numbers, dates, product codes, phone numbers and email addresses are left-to-right islands inside right-to-left text. Wrap each in its own element with an explicit direction and isolation, rather than trusting the renderer to guess from context. Guessing is exactly what produces the scrambled number.
Rule 2 — mirror the whole document, not the text
Set the direction once on the container and let the layout flip: the logo, the column order of the line table, the totals block and the signature area all move together. Hand-flipping individual margins produces a document that is right-to-left in some places and left-to-right in others, which is harder to read than either.
Rule 3 — embed a font with a real Arabic cut
A missing Arabic font renders as boxes, or worse, as disconnected letters that look almost right until a customer reads their own name. Use a typeface with a proper Arabic design — Cairo, Tajawal, IBM Plex Sans Arabic or Noto Sans Arabic — and embed it in the PDF rather than relying on whatever the server happens to have installed.
Rule 4 — Arabic needs different typographic settings
- More line height than Latin — roughly 1.6 to 1.8 — because the script has deeper ascenders and descenders.
- No italics and no letter-spacing. Both break the connected script rather than emphasise it.
- Bold is a weaker emphasis in Arabic than in Latin — use size and colour to create hierarchy instead.
Rule 5 — decide the bilingual structure deliberately
For short labelled fields — invoice number, date, VAT number — put Arabic and English side by side in the same row. For paragraphs such as terms and conditions, stack them as separate blocks. Interleaving line by line is the pattern that makes a bilingual invoice unreadable in both languages at once.
Test with the ugliest data you have: the longest customer name, a fifteen-line order, a credit note referencing an old invoice number, and an address with a building number in it. Templates pass on the demo invoice and fail on the real one.
One compliance warning
Never remove a field for the sake of the layout. Tax invoices carry mandated content, and a designer tidying away a "cluttered" line can quietly make every invoice non-compliant. Redesign around the required fields, never through them.