有人推荐支持OpenType (.OTF) 的Python PDF生成器吗?
去年11月我在这里问过一个问题,之后我对ReportLab这个库非常满意,因为它满足了我所有用Python生成PDF的需求。
不过,我发现ReportLab虽然可以使用普通的TrueType(TTF)字体,但它不支持OpenType(OTF)字体。
我现在正在做的一个小工具需要用到一些OpenType字体,所以很遗憾,ReportLab就不适合我了。
有没有人能推荐一个支持OpenType字体的Python PDF生成器呢?
这个工具不需要太复杂,我只需要能把UTF-8文本放到页面上就行。
更新一下:OpenType字体大致分为两种类型:TrueType风格和PostScript风格,主要是看它们是如何存储字形轮廓的。ReportLab只支持TrueType风格的字体。在Windows系统上,你可以通过文件扩展名来区分:TrueType和TrueType风格的OpenType字体是.TTF,而PostScript风格的OpenType字体是.OTF。
所以,我真正想问的是,有没有人能推荐一个支持.otf字体的Python PDF生成器?
2 个回答
如果reportlab能直接支持OTF格式那就太好了,但大多数人其实只需要某种OpenType字体的TrueType版本。我用这个fontforge的脚本把我需要的字体转换成了TrueType,效果非常好。
来自 http://www.se.eecs.uni-kassel.de/~thm/OpenOffice.org/bugs.html :
#!/usr/bin/fontforge
# Quick and dirty hack: converts a font to truetype (.ttf)
Print("Opening "+$1);
Open($1);
Print("Saving "+$1:r+".ttf");
Generate($1:r+".ttf");
Quit(0);
这要看情况了……OpenType 是为了扩展 TrueType 而设计的(而且 内部结构基本上是基于 TrueType 的),所以有些人甚至 成功在 reportlab 中使用了 OpenType 字体。我想这主要取决于你使用字体时是否需要一些特殊的 OTF 特性。
实际上,在 reportlab 的 TTFontFile 类的源代码中,有一些 注释提到了 OpenType,所以试试看也是值得的。
补充:这些注释提到了一条错误信息,基本上总结了 reportlab 无法支持 OTF 字体的情况。OTF 字体可以用几种格式存储轮廓数据(可以参考上面的维基百科链接)。在这种情况下,这个字体似乎使用了 CFF 格式,而 reportlab 在它的字体解析器中特别检查这个格式,并且明确拒绝,给出的错误信息是“不支持 PostScript 轮廓”。
这基本上就是我对字体和 PDF 生成器的了解了。抱歉!期待看到其他人的建议。
补充 2:好吧,看看 Django 的文档,我发现他们提到了另一个完整的 PDF API:pdflib。我没有直接使用过 PDFlib,而且它不是免费的(无论是价格还是许可证)。我觉得他们的文档也很烦人,因为我不能直接看到英文的 API,而是得下载整个包(不知道有没有免费试用版)。不过我看了德文的文档,奇怪的是可以单独免费下载。我的大学德语水平让我看懂了他们声称支持 Unicode 和带有 PostScript 轮廓的 8 位 OpenType 字体。
我听起来对他们很兴奋吗?并没有 :-) 希望有使用并喜欢他们的人能纠正我,因为我再次强调我没有亲身体验。如果你的预算允许,且其他方法都不行,这可能是一个选择。