Bootstrap CSS не применяется в weasyprint

Я сделал фляжное приложение, которое генерирует .pdf из html с помощью weasyprint и отправляет его как вложение. Но видимо bootstrap 4 css не применяется. Я не могу найти решение. Он хорошо работает с pdfkit, но мне нужен weasyprint, так как pythonanywhere.com не поддерживает pdfkit.

Я попытался связать бутстрап, используя бутстрап css как файл в своем html, но разницы не было.

Это моя часть Python, которая генерирует и отправляет PDF.

@app.route('/pdf_send', methods=('GET', 'POST'))
@login_required
def pdf_send():

    rendered = render_template(
    'pdf_send2.html', 
    name=name_g, 
    surname=surname_g,
    email=email_g,
    address=address_g,
    invoice_no=invoice_no_g,
    dict_g=dict_g,
    bendra_suma_g = ('%.2f' % round(float(bendra_suma_g[0]), 2)),
    send=send_g,
    today=today_g
    )

    css_file = ('static/bootstrap.css')
    filename = 'SF-' + invoice_no_g +'.pdf'
    html = HTML(string=rendered)
    css = CSS(filename=css_file)
    html.write_pdf(filename, stylesheets=[css])
    send_email(filename, email_g)

    return redirect(url_for('index'))

person Mindaugas N.    schedule 26.03.2018    source источник
comment
Вы пробовали читать локальную копию bootstrap css и добавлять ее вручную в виде гигантской строки? Не сказать, что это эффективно, но это был бы хороший шаг по устранению неполадок. Я не могу найти документацию, указывающую, что внешние файлы css поддерживаются напрямую. weasyprint.readthedocs.io/en/latest/   -  person TinkerTenorSoftwareGuy    schedule 26.03.2018
comment
Это все тот же результат, что и раньше. Почему-то weasyprint не ладит с бутстрапом.   -  person Mindaugas N.    schedule 26.03.2018
comment
Вы убедились, что нет импорта или других современных функций CSS? Может быть, поэтому он не совместим. Из документации мне показалось, что есть определенные функции css, которые явно поддерживает weasyprint, и все.   -  person TinkerTenorSoftwareGuy    schedule 26.03.2018
comment
Поэтому я удалил Bootstrap, но добавил пользовательский css в тот же html. Не удалось заставить weasyprint работать вместе с Bootstrap.   -  person Mindaugas N.    schedule 27.03.2018
comment
Я думаю, что ответ в том, что weasyprint — плохая идея. Кажется крайне ограниченным. Я бы пересмотрел требование его использования.   -  person TinkerTenorSoftwareGuy    schedule 28.03.2018


Ответы (2)


Я знаю, что это старая тема, но я наткнулся на нее, ища ответ на тот же вопрос, поэтому я добавляю свой обходной путь на случай, если он поможет кому-то еще. Я собираюсь начать с указания на то, что, хотя это и работает, Bootstrap на самом деле не предназначен для использования для печати, а weasyprint игнорирует что-либо внутри запроса @media, поэтому вам все равно придется добавить много CSS, чтобы чтобы он отображался правильно, так что, вероятно, оно того не стоит.

Используя код из исходного вопроса, если вы добавите загрузочный cdn css в список stylesheets, он отобразит:

html = HTML(string=rendered)
css = CSS(filename=css_file)
html.write_pdf(filename, stylesheets=[css, "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"])

Однако, учитывая проблемы с рендерингом Bootstrap, я обнаружил, что этот прием значительно полезнее для применения шрифтов.

person NotQuiteHere    schedule 26.06.2019
comment
На какой файл ссылается переменная css_file? это какой-то пользовательский css или локальная копия начальной загрузки? Как-то я пробовал, и он не отображается так, как должен. col-md* классы не отображаются должным образом. - person Volatil3; 02.07.2020
comment
@Volatil3, у тебя col-md* правильно распечатано в PDF? Если да, то не могли бы вы указать решение? - person Paulo Marques; 13.11.2020
comment
Извините, css_file — это ваш пользовательский css. Bootstrap добавляется в вызов таблиц стилей. Боюсь, я использовал пользовательский CSS, чтобы получить столбцы правильного размера в pdf. Поскольку он всегда будет одного размера, он не должен быть отзывчивым (для моего случая использования). - person NotQuiteHere; 14.11.2020

weasyprint плохо работает с бутстрапом.

Это ссылка Ссылка на сайт Github для ясности.

Какие бы классы начальной загрузки вы ни написали, WeasyPrint будет игнорировать их.

Вы можете увидеть сообщения "Ignored..." в журнале ошибок WeasyPrint (если вы когда-либо инициализировались).

Так что лучше использовать CSS для страниц печати

person Phalgun G    schedule 10.04.2018