Как можно использовать кириллицу в подвале (footer) при создании PDF с помощью wkhtmltopdf?

При добавлении в нижний колонтитул текста "Страница [page] из [toPage]" возникает проблема с выводом, отображающем ???????? вместо ожидаемого формата, например, "1 из 4". Как можно исправить это, чтобы корректно отображались номера страниц? 

```python
options = {
	"orientation": "portrait",
	"page-size": "A4",
	"margin-top": "1.0cm",
	"margin-right": "1cm",
	"margin-bottom": "1.5cm",
	"margin-left": "1cm",
	"encoding": "UTF-8",
	'footer-center': "Страница [page] из [toPage]",
	'footer-font-size': 10,
}
out="... html page ..."
pdf = pdfkit.from_string(out, options=options, configuration=wkhtml_path)
```
  • 18 ноября 2024 г. 18:33
Ответы на вопрос 2
Проблема с отображением кириллицы при использовании wkhtmltopdf может возникать из-за того, что по умолчанию wkhtmltopdf использует системные шрифты, не поддерживающие кириллицу. Чтобы решить эту проблему, вы можете попробовать следующие шаги:

1. **Убедитесь, что указанный шрифт поддерживает кириллицу**: Для этого ни в нижнем колонтитуле, ни в основном контенте вы не должны использовать шрифты, которые не поддерживают кириллицу. Одна из рекомендаций - использовать шрифты, такие как DejaVu Sans или Liberation Sans.

2. **Указать шрифт для нижнего колонтитула**: Вы можете указать шрифт, чтобы он правильно отображал кириллицу. Например, чтобы установить DejaVu Sans в качестве шрифта для нижнего колонтитула, используйте параметр `--footer-font-name`.

3. **Пример кода с указанием шрифта**:
   
```python
options = {
    "orientation": "portrait",
    "page-size": "A4",
    "margin-top": "1.0cm",
    "margin-right": "1cm",
    "margin-bottom": "1.5cm",
    "margin-left": "1cm",
    "encoding": "UTF-8",
    "--footer-center": "Страница [page] из [toPage]",
    "--footer-font-size": 10,
    "--footer-font-name": "DejaVu Sans"
}
out = "... html page ..."
pdf = pdfkit.from_string(out, options=options, configuration=wkhtml_path)
```

4. **Встраивание шрифтов в HTML**: Если вы используете пользовательские шрифты, вы также можете встроить их в ваш HTML-документ с помощью CSS (например, с использованием @font-face), чтобы гарантировать, что шрифты доступны при генерации PDF.

5. **Проверка совместимости**: Убедитесь, что ваша версия wkhtmltopdf поддерживает использование шрифтов; иногда старые версии могут иметь ограничения.

С этими изменениями вы должны увидеть корректное отображение кириллических символов в нижнем колонтитуле вашего PDF-документа.
import pdfkit
import requests

options = {
    "orientation": "portrait",
    "page-size": "A4",
    "margin-top": "1.0cm",
    "margin-right": "1cm",
    "margin-bottom": "1.5cm",
    "margin-left": "1cm",
    "encoding": "utf-8",

    'footer-center': "Страница [page] из [toPage]",
    'footer-font-size': 10,

}

url = 'https://pingvinus.ru/note/find-big-files'
r = requests.get(url)
pdfkit.from_string(r.text, f'{url.split("/")[-1]}.pdf', options=options, verbose=True)


Код отрабатывает корректно:

Похожие вопросы