我们有一个Django应用程序,我们使用HTML
到pdf
生成工具来构建pdf文档。我们遇到了将HTML转换为pdf的服务器上不存在的字体问题,我想添加一个单元测试,可以验证托管服务器上是否存在字体。
据我所知,我应该使用Tkinter的tkFont
模块获取可用的字体列表,并确认我们使用的字体在此列表中找到。
class VerifyFontsExistOnServer(BaseTransactionTestCase):
def test_if_font_exists(self):
import Tkinter
import tkFont
Tkinter.Tk()
installed_font_families =[i for i in tkFont.families()
if 'Helvetica' in i
or 'Courier' in i
or 'DejaVuSerif' in i
or 'OCRA' in i]
for font in installed_font_families:
log.info('{0}'.format(font))
但是当我列出项目时,我得到Helvetica
字体,但不是Helvetica-Light。我相信这是这个家族的一部分,但是有没有办法确定这个家族的这种特殊字体是否存在?
答案 0 :(得分:1)
我最终编写了一个基于shell的方法来调用fc-list terminal命令:
def verify_fonts_are_installed_for_statements():
import subprocess
from os import path
potential_locations = [
'/usr/bin/fc-list',
'/usr/sbin/fc-list',
'/usr/local/sbin/fc-list',
'/usr/local/bin/fc-list',
]
valid_path = None
for file_path in potential_locations:
if path.exists(file_path):
valid_path = file_path
break
if valid_path is None:
raise IOError('could not find fc-list to verify fonts exist.')
cmd = [valid_path]
output = subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0]
if 'Helvetica Neue' not in output:
raise FontNotInstalledException('Helvetica Neue')
if 'Courier' not in output:
raise FontNotInstalledException('Courier')
log.debug('Courier and Helvetica Neue were found to be installed.')