Может ли reportlab отображать необычные глифы, такие как ????? Если да, то как?
Я установил шрифт Symbola, который, как я проверил, содержит глиф для ????, но когда я отображаю его с помощью PDFTextObject со шрифтом, установленным на Symbola, он отображается в виде поля.
Вот некоторый код, который должен воспроизвести проблему. Обратите внимание, что в Ubuntu, чтобы установить шрифт для каждого пользователя, его можно поместить в папку с именем .fonts
в домашнем каталоге пользователя. Reportlab не просматривает эту папку, поэтому я указал ее точное местоположение.
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
width, height = A4
from reportlab.lib.colors import red
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
# NOTE: provide the location of Symbola.ttf on your setup...
pdfmetrics.registerFont(TTFont("Symbola", "/home/my-user-name/.fonts/Symbola.ttf"))
c = canvas.Canvas("test-symbola-font.pdf")
to = c.beginText()
to.setTextOrigin(50,height-50)
to.setFont("Symbola", 30)
to.setFillColor(red)
to.textLine(u"Some symbols: ????????????")
c.drawText(to)
c.showPage()
c.save()
3 символа эмодзи (потрясенное лицо, лицо с поднятыми руками и рука, делающая символ ОК) представлены в Symbola, но в PDF-файле они отображаются в виде прямоугольников вокруг вопросительных знаков. Это верно как для ветки reportlab «по умолчанию» из репозитория mercurial на битбакете (pip reports версии 2.7), так и для обычной установленной версии pip (pip reports 3.0 — странно!).
В обоих случаях глифы из Symbola встроены, но я не нашел способа определить, КАКИЕ глифы встроены! pdffonts сообщает о встроенном шрифте Symbola как «TrueType», а не «CID TrueType», 16-битном TrueType - возможно, это проблема ?? Я просмотрел сгенерированный PDF-файл с помощью утилиты предварительной проверки Acrobat, и действительно, 3 глифа отсутствуют.
Шрифт Symbola прекрасно работает в моей системе — такие глифы, как эти эмодзи, отображаются в браузерах, терминалах и т. д., и я проверил, что они действительно исходят от Symbola.
Обновление: отсутствующие глифы, о которых сообщает Acrobat, имеют кодовые точки U+F080, U+F081 и U+F082 (т. е. эти кодовые точки находятся в тексте в формате pdf). Они неверны (должны быть U+1F631, U+1F64C и U_1F44C).