PDF: поиск шрифтов и в Windows-путях (запасной Arial для локального теста)
This commit is contained in:
1 parent
25ed2e3899
commit
13809d20a5
2 files changed
+27
-8
No files matched your search
@@ -7,6 +7,7 @@ videos/
|
|||||||
venv/
|
venv/
|
||||||
bin/
|
bin/
|
||||||
certs/
|
certs/
|
||||||
|
fonts/
|
||||||
|
|
||||||
# Логи (могут содержать токены SDK)
|
# Логи (могут содержать токены SDK)
|
||||||
*.log
|
*.log
|
||||||
|
|||||||
@@ -21,17 +21,35 @@ from docx.shared import Pt, Cm, RGBColor
|
|||||||
from docx.enum.text import WD_ALIGN_PARAGRAPH
|
from docx.enum.text import WD_ALIGN_PARAGRAPH
|
||||||
|
|
||||||
# --- Шрифты для кириллицы в PDF ---
|
# --- Шрифты для кириллицы в PDF ---
|
||||||
|
# Ищем шрифты в нескольких местах: Linux (сервер) и Windows (локально).
|
||||||
|
import os as _os
|
||||||
|
|
||||||
|
_FONT_DIR = _os.path.join(_os.path.dirname(_os.path.abspath(__file__)), "fonts")
|
||||||
FONT_PATHS = {
|
FONT_PATHS = {
|
||||||
"DejaVuSans": "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf",
|
"DejaVuSans": [
|
||||||
"DejaVuSans-Bold": "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf",
|
"/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf",
|
||||||
"DejaVuSans-Oblique": "/usr/share/fonts/truetype/dejavu/DejaVuSans-Oblique.ttf",
|
_os.path.join(_FONT_DIR, "DejaVuSans.ttf"),
|
||||||
|
"C:/Windows/Fonts/arial.ttf", # запасной на Windows (поддерживает кириллицу)
|
||||||
|
],
|
||||||
|
"DejaVuSans-Bold": [
|
||||||
|
"/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf",
|
||||||
|
_os.path.join(_FONT_DIR, "DejaVuSans-Bold.ttf"),
|
||||||
|
"C:/Windows/Fonts/arialbd.ttf",
|
||||||
|
],
|
||||||
|
"DejaVuSans-Oblique": [
|
||||||
|
"/usr/share/fonts/truetype/dejavu/DejaVuSans-Oblique.ttf",
|
||||||
|
_os.path.join(_FONT_DIR, "DejaVuSans-Oblique.ttf"),
|
||||||
|
"C:/Windows/Fonts/ariali.ttf",
|
||||||
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
for name, path in FONT_PATHS.items():
|
for name, paths in FONT_PATHS.items():
|
||||||
try:
|
for path in paths:
|
||||||
pdfmetrics.registerFont(TTFont(name, path))
|
try:
|
||||||
except Exception:
|
pdfmetrics.registerFont(TTFont(name, path))
|
||||||
pass
|
break
|
||||||
|
except Exception:
|
||||||
|
continue
|
||||||
|
|
||||||
# Регистрируем семейство, чтобы reportlab понимал, что DejaVuSans-Bold —
|
# Регистрируем семейство, чтобы reportlab понимал, что DejaVuSans-Bold —
|
||||||
# это жирный вариант DejaVuSans (иначе Paragraph падает с "Can't map family/bold/italic").
|
# это жирный вариант DejaVuSans (иначе Paragraph падает с "Can't map family/bold/italic").
|
||||||
|
|||||||
Reference in new issue
Block a user