30 lines
1.0 KiB
Python
30 lines
1.0 KiB
Python
import re
|
||
from pylatexenc.latex2text import LatexNodes2Text
|
||
from markdown_pdf import MarkdownPdf
|
||
from markdown_pdf import Section
|
||
|
||
class ConvertMdToPdf:
|
||
# Конвертирует md в pdf
|
||
def convertLatexToText(self, text:str):
|
||
# Обрабатываем только математические выражения
|
||
text = re.sub(
|
||
r'\$\$(.*?)\$\$|\$(.*?)\$',
|
||
self.replace_math,
|
||
text,
|
||
flags=re.DOTALL
|
||
)
|
||
pdf = MarkdownPdf(toc_level=2, optimize=True)
|
||
pdf.add_section(Section(text))
|
||
return text
|
||
|
||
def replace_math(self, match):
|
||
math_content = match.group(1) or match.group(2) # $$...$$ или $...$
|
||
try:
|
||
# Преобразуем только математическое выражение
|
||
converted = LatexNodes2Text().latex_to_text(math_content)
|
||
|
||
return converted
|
||
except:
|
||
return math_content # В случае ошибки оставляем как есть
|
||
|