2015-07-21 30 views
2

我們有一個Django應用程序,並且我們利用HTMLpdf生成工具來構建pdf文檔。我們遇到了服務器上不存在字體的問題,將HTML轉換爲pdf,我想添加一個單元測試,以驗證託管服務器上是否存在字體。使用tkinter的tkFont識別字體(Helvetica-Light)是否可用/安裝

從我所學到的,我應該使用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的字體,但不是黑體光強。我相信這是這個家庭的一部分,但是有沒有辦法確定這個家庭的特定字體風格是否存在?

+0

這可能是一個愚蠢的問題......我剛纔輸入的進口tkFont,並發現它是... tkFont一個內置的模塊python像io? –

回答

1

我最後寫一個shell爲基礎的方法來調用fc-list的終端命令:

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.')