На хабре вышла серия постов с переводом книги Kingpin, читать которую с экрана ноутбука мне совершенно не удобно, и единственным логичным решением стал перевод книги в PDF для чтения на планшете.

Кевин Поулсен, редактор журнала WIRED, а в детстве blackhat хакер Dark Dante, написал книгу про «одного своего знакомого».

В книге показывается путь от подростка-гика, до матерого киберпахана, а так же некоторые методы работы спецслужб по поимке хакеров и кардеров.

Задавшись такой идеей я перевел все посты в отдельные markdown файлы, внес все уточнения из комментариев к постам. А завершающим этапом прогнал все файлы через Яндекс.Спеллер для исправления грубых орфографических ошибок.

Теперь имея материал для работы, сел и написал скрипт на питоне, собирающий из этого набора файлов единый PDF файл. Вначале markdown файлы конвертируем в соответствующие им html страницы.

CHAPTERS = sorted([os.path.join(APP_PATH, f) for f in glob(CHAPTERS_PATH)])

md = Markdown(output_format="html5")

for chapter in CHAPTERS:
    html = md.reset().convert(open(chapter, 'r').read().decode('utf-8'))
    outhtml = TEMPLATE % html

    filename = os.path.splitext(os.path.basename(chapter))[0] + '.html'
    filepath = os.path.join(HTML_PATH, filename)

    with open(filepath, 'w') as f:
        f.write(outhtml.encode('utf-8'))

А на втором этапе установив в систему wkhtmltopdf и библиотеку python-pdfkit собираем из этого набора файлов готовый PDF.

htmlfiles = [os.path.join(HTML_PATH, f) for f in os.listdir(HTML_PATH) if f.endswith('.html')]

options = {
    'page-size': 'B5', # A5
    'margin-top': '0.75in',
    'margin-right': '0.75in',
    'margin-bottom': '0.75in',
    'margin-left': '0.75in',
    'encoding': 'UTF-8',
    'no-outline': None,
    'no-background': None,
}

pdfkit.from_file(htmlfiles, 'kingpin_ru.pdf', options=options, cover='static/cover.html')

Ссылку на готовый скрипт, а также все markdown файлы я выложил на Github. А приготовить PDF в домашних условиях можно выполнив:

git clone https://github.com/dotzero/Kingpin.git
cd Kingpin
pip install -r requirements.txt
python build_pdf.py

А чтобы не останавливаться на достигнутом, сделал еще и EPUB версию, сделать ее также просто:

git clone https://github.com/dotzero/Kingpin.git
cd Kingpin
pip install -r requirements.txt
python build_epub.py

Ссылки на готовые книги: