代码之家  ›  专栏  ›  技术社区  ›  paarandika

如何使用PyMuPDF将unicode文本插入PDF?

  •  0
  • paarandika  · 技术社区  · 8 月前

    我正在尝试使用PyMuPDF库将Unicode文本插入到PDF文件中。基于文档示例,我有以下代码:

    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")
    

    此代码运行时没有任何错误。但是,它生成的pdf文件只有点(“.”)。 enter image description here

    我是否遗漏了什么,或者只是PyMuPDF不支持unicode插入?

    1 回复  |  直到 8 月前
        1
  •  1
  •   Grismar    8 月前

    你可能需要进一步调整,我看不懂僧伽罗语,但这会生成一个PDF,其中包含你在Nirmala UI和Iskoola Pota中的文本:

    import fitz  # PyMuPDF
    
    doc = fitz.open()
    page = doc.new_page()
    
    # load and add the font, and name them for Fitz (PyMuPDF)
    page.insert_font(fontname='F0', fontfile=r'C:\Windows\Fonts\Nirmala.ttf')
    page.insert_font(fontname='F1', fontfile=r'C:\Temp\Fonts\iskpotab.ttf')
    
    sinhalese_text = "ශ්‍රී දළදා මාලිගාව යනු බුදුරජාණන් වහන්සේගේ වම් දන්තධාතූන් වහන්සේ වර්තමානයේ තැන්පත් කර ඇති මාළිගාවයි."
    
    # insert the text twice, using both fonts
    font_size = 24
    page.insert_text((50, 100), sinhalese_text, fontname='F0', fontsize=font_size)
    page.insert_text((50, 150), sinhalese_text, fontname='F1', fontsize=font_size)
    
    doc.save("text.pdf")
    doc.close()
    

    注:据我所知,文中写道:“牙舍利寺是目前供奉佛陀左牙舍利的寺庙。”