первый коммит

This commit is contained in:
Vladislav Ostapov 2025-05-27 10:15:34 +03:00
commit 683e32bee8
5 changed files with 64 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
.idea
gost-espd-generator.iml
venv
result-*

13
README.md Normal file
View File

@ -0,0 +1,13 @@
# ГОСТ-ЕСПД генератор документов
## Генератор документа с исходным кодом
Запускать в той же директории, что и находится проект.
Использование:
```shell
python3 source_code_generator.py /path/to/source/code /path/to/out.docx DOC.NUMBER
```
После генерации нужно будет обновить ссылки в содержании и исправить текст в первых листах.

2
requirements.txt Normal file
View File

@ -0,0 +1,2 @@
docxtpl

44
source_code_generator.py Normal file
View File

@ -0,0 +1,44 @@
from docxtpl import DocxTemplate
from pathlib import Path
import sys
# Загрузка шаблона
doc = DocxTemplate("template/source-code-template.docx")
def get_sources(source_root):
filenames = [str(path.absolute())[len(source_root):] for path in Path(source_root).rglob('*.*')]
filenames.sort()
return filenames
def _get_file_context(source_root, filename):
with open(source_root + filename, 'r', encoding="utf8") as f:
return {
'filename': filename.replace('\\', '/'), # для шиндовс, чтобы правильно генерить пути
'content': f.read()
}
def render_source_code(source_root, out_filename, doc_number="РОФ.ГУТВ.00000-12"):
# Данные для заполнения шаблона
context = {
'doc_number': doc_number,
'files': [
_get_file_context(source_root, src)
for src in get_sources(source_root)
]
}
# Заполнение шаблона данными
doc.render(context)
# Сохранение документа
doc.save(out_filename)
if __name__ == '__main__':
if len(sys.argv) != 4:
print(f"Usage: {sys.argv[0]} /path/to/source/code /path/to/out.docx DOC.NUMBER")
else:
render_source_code(sys.argv[1], sys.argv[2], doc_number=sys.argv[3])

Binary file not shown.