From 3e6d3a5ec5f1167c6fc48280a3e8d7be2eb09f82 Mon Sep 17 00:00:00 2001 From: Alexei Date: Tue, 31 Oct 2023 15:52:31 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D1=81?= =?UTF-8?q?=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D0=BC?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BD=D0=B0=20=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE?= =?UTF-8?q?=D1=82=D0=B5=D0=BA=D1=83=20weasyprint=20#9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- auth_docs/test_doc.html | 120 +++++++++++++++++++++++++++++++++++++++++++++++ auth_docs/test_doc.odt | Bin 19082 -> 18549 bytes bot_modules/authorize.py | 2 +- config_auth_docs | 2 +- requirements.txt | 2 +- template/docs_message.py | 60 +++++++++++++++--------- 6 files changed, 160 insertions(+), 26 deletions(-) create mode 100644 auth_docs/test_doc.html diff --git a/auth_docs/test_doc.html b/auth_docs/test_doc.html new file mode 100644 index 0000000..3f326bf --- /dev/null +++ b/auth_docs/test_doc.html @@ -0,0 +1,120 @@ + + + + + + + + + + +

+
+ +

+

Регистрационные +данные

+


+ +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ ID пользователя

+

+ TableFieldDestiny.USER_ID +

+

+ Имя

+

+ TableFieldDestiny.USER_NAME

+

+ Фамилия

+

+ TableFieldDestiny.USER_FAMILY_NAME

+

+ Отчество

+

+ TableFieldDestiny.USER_MIDDLE_NAME

+

+ Дата рождения

+

+ TableFieldDestiny.USER_BIRTHDAY

+

+ Адрес

+

+ TableFieldDestiny.USER_ADDRESS

+

+ Контакты

+

+ TableFieldDestiny.USER_CONTACTS

+

+ Подтверждение

+

+ TableFieldDestiny.USER_CONFIRM

+

+ Доступ

+

+ TableFieldDestiny.ACCESS

+

+ Дата создания записи

+

+ TableFieldDestiny.CREATE_DATE

+
+


+ +

+ + \ No newline at end of file diff --git a/auth_docs/test_doc.odt b/auth_docs/test_doc.odt index e937454b43901dd0f3ed5cac7cd085c9fedf03ee..92fa308fe04a9cd84a49e5d9c1399e8794930fb5 100644 GIT binary patch delta 16620 zcmbum1#})gvLQ+mtD%De=381&ppa}9(;1FmaAkZKnVMaPJ2$JA`l4znB50rmUO#jS? zLllFB`?sobzd(uN@IcZ26vq|3(-~qP|9|CC|0-wutKKhAmcLRgFwQ?|?N=~vP~e?V z1^Kt@{ZT-yj2!i7U9Bu5lt!#q=#kp)zreGqhUDdGFc5v=N94&j_2J~V`5H`7&EykxCU0SW4)MM5Zx4yJ0&05-lIB< z?sRYk=xOc;?hSZA@l?$yzwG|t#A}59>^JY(%;F*}g@0aCcdQ3~JLLgijtE2OeNk=d zr?Ys2RJLEqn4@)Bevlr!HD+ax)P3f2&JCI2c|YZQDD9K`(V))qRi5t4hYqY8dz4t@ zBN)EerR%S=mBnm6w$&8Qyj4^gve8s~>Of{@G3IfdX<#Se|w zqKyngW{D=GBXGE;eep=*yFp*V3{9E|IFmLI<2~12C@)U0G!q_3%x%f?&kx{u_c%icxe@_kMe?>W3q9I+(`H zvB=5>s75fRo##J2JbODfTXU3`$$BWxt^q{d&Uf>$D$SF^nCs9k5{(Pv_T zI@m`-YJ|%>a|_StrpeLC))mlbrtD0rY2INCf0mqr+~plylv9Cy_4M>~R*`;Si{2hO z(#sVY|JV?>{v+88QQwitRN5ck&m&jQG#o5jN_E}1DkCznLX*kK)vlFuDG9GHvKUlanx!Qk`}qzEt=75v=pAf;PG??B z(+^f0LhmD9f*5!BNw@=f@HxY3!q+tML$0K4Y=alof07rJyU{t#<)kHY>zg|2ivmzCY+f%jX*Ci&Z`o2sY48hm;Nv z-K3d6H^%NK5oabVN*<6F;LYzAUKIO?&L(lRztBS;V8i%f0bS)}J-;G9*Yzx16b(mv zo3xzka(zv%_yU-{$xi96;rlv*IIqKfS2W7o~HcN=A0U1=P`tK

NQ#Y}O{ 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 diff --git a/bot_modules/authorize.py b/bot_modules/authorize.py index 1e572d6..9c39865 100644 --- a/bot_modules/authorize.py +++ b/bot_modules/authorize.py @@ -332,7 +332,7 @@ def GetReplaceDictFunc(a_Bot, a_user_id): result = {} i = 0 for f in table.GetFields(): - result.update({str(f.m_Destiny): item[i]}) + result.update({str(f.m_Destiny): str(item[i])}) i += 1 print(result) return result diff --git a/config_auth_docs b/config_auth_docs index 7822470..1524400 100644 --- a/config_auth_docs +++ b/config_auth_docs @@ -1 +1 @@ -auth_docs/test_doc.odt +auth_docs/test_doc.html diff --git a/requirements.txt b/requirements.txt index 9e91223..296c19c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ aiogram==2.20 colorama==0.4.5 -odfpy +weasyprint diff --git a/template/docs_message.py b/template/docs_message.py index e910632..3f9288a 100644 --- a/template/docs_message.py +++ b/template/docs_message.py @@ -40,35 +40,49 @@ def DocFilesTemplate(a_Bot, a_FilesFunc, a_CaptionMessage, a_AccessFunc, a_GetBu ) return DocFiles -from odf import opendocument, text, teletype +async def ReplaceInFile(a_Bot, a_InputFileName, a_OutFileName, a_DictReplace): + try: + filedata = '' + print('ReplaceInFile f', a_InputFileName) + with open(a_InputFileName, 'r') as in_f: + filedata = in_f.read() -async def MakeDocFile(a_Bot, a_FilePath, a_DictReplace, a_user_id): - print ('MakeDocFile', a_FilePath) - #FixBadZipfile(a_FilePath) - document = opendocument.load(a_FilePath) # odf.opendocuement. - if document == None: - a_Bot.GetLog().Error(f'Не удалось загрузить файл {a_FilePath}.') - return None + s = filedata + print('ReplaceInFile s', s) + for rep_this, to_this in a_DictReplace.items(): + print('ReplaceInFile', rep_this, to_this) + s = s.replace(rep_this, to_this) - for element in document.getElementsByType(text.Span): - extracted_text = teletype.extractText(element) - print('MakeDocFile', extracted_text) + with open(a_OutFileName, 'w') as out_f: + out_f.write(s) + a_Bot.GetLog().Success(f'Создан файл {a_OutFileName}') + return a_OutFileName + except Exception as e: + a_Bot.GetLog().Error(f'Не удалось заменить текст в фале {a_InputFileName} и записать в {a_OutFileName}. Ошибка {str(e)}') + return None - for rep_this, to_this in a_DictReplace.items(): - if extracted_text.find(rep_this) != -1: - extracted_text = extracted_text.replace(rep_this, to_this) +from weasyprint import HTML, CSS - new_element = text.Span() - new_element.setAttribute('stylename', element.getAttribute('stylename')) - new_element.addText(extracted_text) +async def SaveAsPdf(a_Bot, a_InputFileName, a_OutFileName): + try: + HTML(filename = a_InputFileName).write_pdf(a_OutFileName) + a_Bot.GetLog().Success(f'Создан файл {a_OutFileName}') + return a_OutFileName + except Exception as e: + a_Bot.GetLog().Error(f'Не удалось создать пдф из фала {a_InputFileName} и записать в {a_OutFileName}. Ошибка {str(e)}') + return None - element.parentNode.insertBefore(new_element, element) - element.parentNode.removeChild(element) +async def MakeDocFile(a_Bot, a_FilePath, a_DictReplace, a_user_id): + print ('MakeDocFile', a_FilePath) + user_file_path = a_FilePath[:-5] + pdf_file_path = user_file_path + user_file_path += f"_{a_user_id}.html" + pdf_file_path += f"_{a_user_id}.pdf" + user_file_path = await ReplaceInFile(a_Bot, a_FilePath, user_file_path, a_DictReplace) + if not user_file_path: + return None - new_file_path = a_FilePath[:-4] - new_file_path += f"_{a_user_id}.odt" - document.save(new_file_path) - return new_file_path + return await SaveAsPdf(a_Bot, user_file_path, pdf_file_path) async def GetFile(a_Bot, a_Path): if not a_Path: