Those blank squares are usually called 'tofu', and they mean exactly one thing: the font that Word is trying to use does not contain the Devanagari glyphs. Word does not fall back gracefully the way a browser does. If the run of text is tagged with a Latin font like Calibri and no complex-script font is specified, you get boxes.
If you are generating the document programmatically, the fix is to set the complex-script font explicitly. In docx terms that is the w:cs attribute on the run fonts, not just w:ascii. Noto Sans Devanagari is the safest choice because it is free, complete, and looks clean in print. Mangal works too on Windows but ages badly on other systems.
What finally worked reliably for me was a slightly roundabout route: write the content as HTML with the font declared in CSS (font-family: 'Noto Sans Devanagari'), embed or install the font on the machine doing the conversion, and let LibreOffice convert HTML to DOCX. LibreOffice handles the script tagging correctly and the resulting file opens cleanly in Word.
If the document was created by hand, select the Hindi text, open the Font dialog, and set the 'Complex scripts' font separately from the 'Latin text' font. Most people never notice that second dropdown exists, and that is where the problem lives.
Markdown for AI
A clean, structured version of this page for AI assistants and LLMs.
We use cookies to ensure you have the best browsing experience on our website. By using our site, you
acknowledge that you have read and understood our
Cookie Policy &
Privacy Policy.
Those blank squares are usually called 'tofu', and they mean exactly one thing: the font that Word is trying to use does not contain the Devanagari glyphs. Word does not fall back gracefully the way a browser does. If the run of text is tagged with a Latin font like Calibri and no complex-script font is specified, you get boxes.
If you are generating the document programmatically, the fix is to set the complex-script font explicitly. In docx terms that is the w:cs attribute on the run fonts, not just w:ascii. Noto Sans Devanagari is the safest choice because it is free, complete, and looks clean in print. Mangal works too on Windows but ages badly on other systems.
What finally worked reliably for me was a slightly roundabout route: write the content as HTML with the font declared in CSS (font-family: 'Noto Sans Devanagari'), embed or install the font on the machine doing the conversion, and let LibreOffice convert HTML to DOCX. LibreOffice handles the script tagging correctly and the resulting file opens cleanly in Word.
If the document was created by hand, select the Hindi text, open the Font dialog, and set the 'Complex scripts' font separately from the 'Latin text' font. Most people never notice that second dropdown exists, and that is where the problem lives.