在reportlab pdf中显示不寻常的字形

时间:2014-02-24 02:00:35

标签: fonts reportlab glyph

reportlab是否能够显示不寻常的字形,例如?如果是这样,怎么样?

我已经安装了Symbola字体,我已经验证它包含一个字形,但当我使用字体设置为Symbola的PDFTextObject显示它时,它显示为一个框。

这是一些应该重现问题的代码。请注意,在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个表情符号字形(一张震惊的脸,一只手在空中,一只手做着OK符号)在Symbola中,但在pdf中以问号标记的方式呈现。对于bitbucket上的mercurial repo(pip报告版本2.7)和普通pip安装版本(pip报告3.0 - 奇怪!)的reportlab的'default'分支都是如此。

在这两种情况下,来自Symbola的字形都是嵌入的,但是我没有找到确定嵌入字形的方法! pdffonts报告嵌入的Symbola字体为“TrueType”,而不是“CID TrueType”,16位TrueType - 也许这就是问题?我看了一下使用acrobat预检实用程序生成的pdf,实际上缺少了3个字形。

Symbola字体在我的系统上运行良好 - 像浏览器,终端等中显示的这些表情符号......我已经检查过它们实际上来自Symbola。

更新:Acrobat报告的缺少的字形具有代码点U + F080,U + F081和U + F082(即:这些代码点位于pdf中的文本中)。这些是不正确的(应该是U + 1F631,U + 1F64C和U_1F44C)。

1 个答案:

答案 0 :(得分:0)

这是bug in reportlabhas been fixed。如果你遇到这个bug,请从那里检查mercurial存储库和pip install(最好是进入虚拟环境!)。修复程序也会发现它即将发布。