Django конвертация HTML в PDF

Использую xhtml2pdf. Сложность в том, что кириллица отображается в виде чёрных квадратов. Поисковик подсказал, что надо подключить шрифт. В инструкции xhtml2pdf есть функция link_callback, которая отвечает за ссылки к подключаемым ресурсам. Но я не понимаю, что я делаю неправильно. Settings.py:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static_dev'),)
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

Views.py:

def link_callback(uri, rel):
  result = finders.find(uri)
  if result:
    if not isinstance(result, (list, tuple)):
      result = [result]
    result = list(os.path.realpath(path) for path in result)
    path = result[0]
  else:
    sUrl = settings.STATIC_URL  # Typically /static/
    sRoot = settings.STATIC_ROOT  # Typically /home/userX/project_static/
    mUrl = settings.MEDIA_URL  # Typically /media/
    mRoot = settings.MEDIA_ROOT  # Typically /home/userX/project_static/media/

    if uri.startswith(mUrl):
      path = os.path.join(mRoot, uri.replace(mUrl, ""))
    elif uri.startswith(sUrl):
      path = os.path.join(sRoot, uri.replace(sUrl, ""))
    else:
      return uri

  if not os.path.isfile(path):
    raise Exception(
      'media URI must start with %s or %s' % (sUrl, mUrl)
    )
  return path

HTML:

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
  <style>
      @font-face {
          font-family: DejaVuSans;
          src: url({% static 'css/fonts/DejaVuSans.ttf' %});
      }
      * {
          font-family: DejaVuSans;
      }
  </style>
</head>
<body>
<div class="font-family">Привет Мир!</div>
</body>
</html>

Ошибка:

The joined path (C:\static\css\fonts\DejaVuSans.ttf) is located outside of the base path component (C:\Users\Guardian45\PycharmProjects\al_ko_v4\static_dev)

С путями разобрался. Вот только всё равно ничего не получилось. При открытии файла ttf вылазит ошибка TTFError. Поиск подсказал, что это недоработка и она вроде ещё не исправлена. Что-то с мета данными шрифтов... Финиш. Воспользовался pdfkit.

Вернуться на верх