Weasyprint "В документе отсутствует атрибут write_png"

Я пишу веб-приложение на Python и Django. Я использую weasyprint для создания pdf-документов и хотел бы использовать write_png() для получения миниатюры в формате png для каждого pdf. Это из моего views.py:

pdf_letter = weasyprint.HTML(string=letter, base_url=static_url).render(
                stylesheets=[weasyprint.CSS(static_url + "/abrechnung/css/print-portrait.css")]
                )
pdf_table = weasyprint.HTML(string=table).render(
                stylesheets=[weasyprint.CSS(static_url + "/abrechnung/css/print-landscape.css")]
                )
val = []
for doc in pdf_letter, pdf_table:
    for p in doc.pages:
        val.append(p)
    pdf_file = pdf_letter.copy(val).write_pdf(f"{datetime.now()}.pdf")
    thumbnail = pdf_letter.copy(val).write_png(f"{datetime.now()}.png")

Когда я пытаюсь запустить программу, в браузере появляется следующее сообщение об ошибке:

У объекта "Документ" нет атрибута 'write_png'

pdf_file = pdf_letter.copy(val).write_pdf(f"{datetime.now()}.pdf")
thumbnail = pdf_letter.copy(val).write_png(f"{datetime.now()}.png")
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Документацию weasyprint по функции write_png() можно найти здесь: https://doc.courtbouillon.org/weasyprint/v52.5/api.html#weasyprint.document.Document.write_png

Почитав документацию по weasyprint, я обнаружил, что weasyprint.HTML.render() создает объект weasyprint.document.Document. У этого объекта есть функция write_png(). Так вот. WTF? Что я делаю не так?

Я попробовал это

for i, page in enumerate(document.pages):
    document.copy([page]).write_png('page_%s.png' % i)

и это

for page in document.pages:
        yield document.copy([page]).write_png()

из учебника Weasyprint (переменные и т.д., конечно, адаптированные к моему коду), но ничего из этого не получилось - я получил ту же ошибку. Запись одного только pdf-файла не вызывает проблем, он сохраняется и возвращается позже. Проблемы начались, когда я попытался добавить функциональность миниатюр

После дальнейших копаний я наконец-то нашел ответ сам: Они отказались от write_png() в 2021 году, и никто не позаботился о том, чтобы изменить документацию...

Вот статья в блоге на эту тему: https://www.courtbouillon.org/blog/00008-weasyprint-53-beta/

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