pythonpdfunicodepymupdf

How to insert a unicode text to PDF using PyMuPDF?


I'm trying to use the PyMuPDF library to insert a Unicode text into a PDF file. I have the following code based on the documentation example:

import pymupdf

doc = pymupdf.open()
page = doc.new_page()
p = pymupdf.Point(50, 72)

# String in Sinhala language
text = (
    "ශ්‍රී දළදා මාලිගාව යනු බුදුරජාණන් වහන්සේගේ වම් දන්තධාතූන් වහන්සේ වර්තමානයේ තැන්පත් කර ඇති මාළිගාවයි."
)

font = pymupdf.Font(fontfile="ISKPOTAB.TTF") # Font file of the default Windows Sinhala font
page.insert_font(fontbuffer=font.buffer) # using font buffer since using name "Iskoola Pota Bold" produce an error
rc = page.insert_text(p, text, fontfile=font.buffer, fontsize=11, rotate=0)
print("%i lines printed on page %i." % (rc, page.number))

doc.save("text.pdf")

This code runs without any errors. However, the pdf file it produces only has dots("."). enter image description here

Am I missing anything here or it's just that PyMuPDF does not support unicode insertion?


Solution

  • Solution using insert_htmlbox letting PyMuPDF determine all fonts automatically.

    import pymupdf
    
    doc = pymupdf.open()
    page = doc.new_page()
    
    sinhalese_text = (
        "ශ්‍රී දළදා මාලිගාව යනු බුදුරජාණන් වහන්සේගේ වම් දන්තධාතූන් වහන්සේ වර්තමානයේ තැන්පත් කර ඇති මාළිගාවයි."
    )
    
    page.insert_htmlbox((50, 100, 300, 300), sinhalese_text)
    
    doc.subset_fonts()
    doc.ez_save("text.pdf")
    doc.close()
    

    Gives you this: enter image description here

    As this method also accepts HTML and CSS syntax, you can influence everything that is in reach of your HTML knowledge ... 😎