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/