xhtml2pdf не применяет CSS при создании PDF (HTML в PDF) - PullRequest
0 голосов
/ 12 мая 2018

Преобразование:

html = template.render(context)
resultFile = open(filepath, "w+b")
pdf = pisa.CreatePDF(html.encode('utf-8'), dest=resultFile,encoding='utf-8', link_callback=link_callback)

link_callback

def link_callback(uri, rel):
    sUrl = settings.STATIC_URL      # Typically /static/
    sRoot = settings.STATIC_ROOT    
    mUrl = settings.MEDIA_URL       # Typically /static/media/
    mRoot = settings.MEDIA_ROOT     # Typically /home/userX/project_static/media/

    # convert URIs to absolute system paths
    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  # handle absolute uri (ie: http://some.tld/foo.png)

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

Я создал PDF с использованием xhtml2pdf.Файл создан, но CSS к нему вообще не применяется.Я проверил путь, который возвращается из link_callback, он правильный, но в pdf вообще не применяется css.

css:

#page_1 {position:relative; overflow: hidden;margin: 64px 0px 65px 0px;padding: 0px;border: none;}

#page_1 #p1dimg1 {position:absolute;top:0px;left:20%;z-index:-1;width:600px;height:870px;}
#page_1 #p1dimg1 #p1img1 {width:600px;height:870px;}

#page_2 {position:relative; overflow: hidden;padding-left: 100px;border: none;height: 854px;}

#page_2 #p2dimg1 {position:absolute;left:27%;z-index:-1;width:490px;height:669px;}
#page_2 #p2dimg1 #p2img1 {width:490px;height:669px;}

путь css, который я получил: / Users /MyPC / проект / проект / статический / CSS / lender_borrower.css

1 Ответ

0 голосов
/ 30 января 2019

xhtml2pdf не разрешает ссылки на внешние таблицы стилей.

Вам потребуется предоставить внутреннюю таблицу стилей - что означает написание ваших стилей в заголовке шаблона HTML, между тегами

<style type="text/css">HERE</style>

Однако обратите внимание, что многие стили CSS не поддерживаются. См. Документы для , какие CSS поддерживаются .

Пример шаблона ниже:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Whatever</title>
  <style type="text/css">

  # PLACE ALL YOUR CSS STYLING HERE

  </style>
</head>
<body>

# content goes here

</body>
</html>
...