Генерация chm файлов в python

Четверг, 20 Фев. 2014 by Kirill Shershen


По работе над программой автоматической генерации справочной информации пришлось столкнуться с созданием chm-файлов на лету. Погуглив, нашел единственный способ сделать это с помощью программы HTML Help Workshop, отсюда вытикают требования для генерации:

  • windows 2000 и выше;
  • установленный HTML Help Workshop;

Чтобы создать chm в этой программе нужно создать проект, который будет описывать структуру и данные chm, а затем из него скомпилировать готовый файл справки. Данный этап происходит у меня в автоматическом режиме, т.к. все данные у меня хранятся в xml файле, оттуда они легко достаются. Файлы проекта имеют простой формат: hhp - простой текстовый, hhc-файл в формате html.

Далее компиляция самого chm файла. Для этого будет использоваться функция из модуля hha.dll которая лежит обычно в папке windows, если установлен HTML Help Workshop. Итого нам надо подключится к библиотеке и вызвать функцию с указанным файлом проекта hhp. 

from ctypes import *
CAF = WINFUNCTYPE(c_bool,c_char_p)

def callback_t(info):
    print 'compile:\t%s' % info
    return True

def callback_t2(info):
    print 'processing:\t%s' % info
    return True

def compile_chm(hhp_file):
    try:
        ole32 = windll.LoadLibrary('ole32.dll')
        ole32.CoInitialize(0)
    except Exception, e:
        print "error: %s" % e
    try:
        hha = windll.LoadLibrary('hha.dll')
        hha.HHA_CompileHHP(hhp_file, CAF(callback_t), CAF(callback_t2),0)
    except Exception, e:
        print "error: %s" % e
    finally:
        ole32.CoUninitialize()
    print 'success'

Вот и всё. Загружаем hha.dll без пути, т.к. он должен быть в путях по умолчанию. Описываем две калбэк функции. Запускаем функцию HHA_CompileHHP с путём к файлу проекта.  

Теги: python , work , chm


blog comments powered by Disqus