PyDocxCreator — это мой небольшой Python-проект для создания и форматирования Word-документов...
Project description
PDC
PyDocxCreator — Небольшой Python-проект для создания и форматирования Word-документов с использованием библиотеки python-docx.
Я постарался заложить гибкую основу для последующего расширения.
Возможности
- Абстрактные классы для описания стилей документа, абзацев и текста.
- Реализация базовых стилей и логики генерации Word-документов.
- Гибкая настройка шрифтов, отступов, выравнивания и др.
Структура проекта
py_docx_creator/— модуль с основными и абстрактными классами:abstract_classes/— абстрактные интерфейсыabc_document/— абстрактные классы для описания документа и взаимодействия с нимabc_style_dataclasses/— абстрактные классы для описания стилей
core/— реализация интерфейсовdocument/— реализация взаимодействия с документомstyle/— реализация пустых базовых шаблонов стилей
default_style_preset/- несколько заготовленных стилейenums/-enumы шрифтов, стилей документа, выравнивания
Установка
pip install py_docx_creator
Базовый пример использования
from py_docx_creator.core.document.document import Document
from py_docx_creator.default_style_preset.default_paragraph_style import DefaultHeaderParagraphStyle
from py_docx_creator.default_style_preset.default_text_style import DefaultHeaderTextStyle
document = Document()
document.create_document("Документ.docx")
document.write(document, "Базовый пример использования", paragraph_style=DefaultHeaderParagraphStyle, text_style=DefaultHeaderTextStyle)
document.save_document()
Предусмотрена возможность прописать шаги формирования документа в отдельной функции типа Callable. Аргументы такой функции задаются в отдельном поле класса Document.
*** Важный момент при написании функции-инструкции. Для корректной работы первый позиционный аргумент данной функции (в данном примере doc: Document) обязательно должен быть экземпляр класса Document. Данный аргумент является системным и прокидывается автоматически при выполнении кода.
from py_docx_creator.core.document.document import Document
from py_docx_creator.default_style_preset.default_paragraph_style import DefaultHeaderParagraphStyle
from py_docx_creator.default_style_preset.default_text_style import DefaultHeaderTextStyle
def instruction(doc: Document, **kwargs):
file_name = kwargs.get("name", "document.docx")
doc.create_document(file_name)
doc.write(doc, "Базовый пример использования", paragraph_style=DefaultHeaderParagraphStyle, text_style=DefaultHeaderTextStyle)
document = Document()
document.create_document("Документ.docx")
document.creation_instruction = instruction # инструкция по формированию документа
document.instruction_kwargs = {"name": "Базовый пример использования.docx"} # аргументы выполняемой функции
document.run_instruction(save_after=True) # запуск формирования документа
Реализован простой агрегатор для конвейерного формирования документов DocumentCreator.
from py_docx_creator.core.document.document import Document
from py_docx_creator.core.document.document_creator import DocumentCreator
from py_docx_creator.default_style_preset.default_paragraph_style import DefaultHeaderParagraphStyle
from py_docx_creator.default_style_preset.default_text_style import DefaultHeaderTextStyle
def instruction(doc: Document, **kwargs):
file_name = kwargs.get("name", "document.docx")
doc.create_document(file_name)
doc.write(doc, "Базовый пример использования", paragraph_style=DefaultHeaderParagraphStyle, text_style=DefaultHeaderTextStyle)
document_creator = DocumentCreator()
for i in range(5): # имитация конвейера
document: Document = Document()
document.creation_instruction = instruction # инструкция по формированию документа
document.instruction_kwargs = {"name": f"{i}.docx"} # аргументы выполняемой функции (в данном случае отличные друг от друга имена файлов)
document_creator.add_document(document) # список экземпляров `Document` готовых к формированию
document_creator.start_creating_documents(save_after=True) # запуск формирования всех документов
Стили
Реализованы базовые стили:
- Стиль страницы
DefaultPageStyle- базовый стиль страницы документа (поля/отступы)
- Стиль параграфа
DefaultHeaderParagraphStyle- базовый стиль параграфа для заголовкаDefaultMainParagraphStyle- базовый стиль параграфа для основного текста
- Стиль текста
DefaultHeaderTextStyle- базовый стиль для текста заголовкаDefaultMainTextStyle- базовый стиль для основного текста
Создание собственных стилей
Ниже приведен пример создания стилей на основе базовых стилей
from py_docx_creator.core.document.document import Document
from py_docx_creator.default_style_preset.default_page_style import DefaultPageStyle
from py_docx_creator.default_style_preset.default_paragraph_style import DefaultHeaderParagraphStyle
from py_docx_creator.default_style_preset.default_text_style import DefaultHeaderTextStyle
from py_docx_creator.enums.enum_align_paragraph import AlignParagraph
class MyTextStyle(DefaultHeaderTextStyle): # Стиль текста
italic = True
size = 24
class MyParagraphStyle(DefaultHeaderParagraphStyle): # Стиль параграфа
alignment = AlignParagraph.LEFT.value
class MyPageStyle(DefaultPageStyle): # Стиль страницы
left_margin = 200.0
document = Document()
document.create_document("Документ.docx")
document.apply_style(document, style=MyPageStyle) # пример того как задать стиль страницы `PageStyle`
document.write(document, "Базовый пример использования", paragraph_style=MyParagraphStyle, text_style=MyTextStyle)
document.save_document()
При необходимости есть возможность создать стиль с нуля. Для этого необходимо наследоваться от базовых классов.
PageStyle- для стилей страницыParagraphStyle- для стилей параграфаTextStyle- для стилей текста
Быстрая смена стиля
Имеется возможность подправить основные параметры стилей прямо на месте записи. Для этого имеются опциональные именованные аргументы.
size: float- размер шрифтаbold: bool- жирное начертаниеitalic: bool- курсивное начертаниеunderline: bool- подчеркнутое начертаниеspace_after: float- отступ поле параграфаalignment: AlignParagraph- выравнивание параграфаfirst_line_indent: float- отступ первой строки (красная строка)with_leader: bool- заполнение строки символом_leader_width: float- длинна заполнения символом_(учитывается только приwith_leader=True, значение по умолчанию6.8)
document.write(document, "Базовый пример использования",
paragraph_style=DefaultHeaderParagraphStyle,
text_style=DefaultHeaderTextStyle,
size=12,
bold=True,
alignment=AlignParagraph.RIGHT # !!! без .value !!!
...
)
или же:
write_config = {
"paragraph_style": DefaultHeaderParagraphStyle,
"text_style": DefaultHeaderTextStyle,
"size": 13,
"bold": True,
"space_after": 10
}
document.write(document, "Базовый пример использования", **write_config)
TODO:
- Реализовать многопоточное формирование документов при использовании
DocumentCreator - Реализовать взаимодействие с таблицами
- Реализовать запись в виде списка (Word)
- Работа над документацией
- Рефакторинг (при необходимости)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file py_docx_creator-0.2.0.3.tar.gz.
File metadata
- Download URL: py_docx_creator-0.2.0.3.tar.gz
- Upload date:
- Size: 13.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
07db627956dc2fd510d04a258500f50ceb6e7e8804369dbab58e2d53fc9f555b
|
|
| MD5 |
1957cd33697d58d382212bd2769faa2e
|
|
| BLAKE2b-256 |
c4d7842c8401289b4756f928342cac2dc3c1352cc2f72ef444d48527b274fa3b
|
File details
Details for the file py_docx_creator-0.2.0.3-py3-none-any.whl.
File metadata
- Download URL: py_docx_creator-0.2.0.3-py3-none-any.whl
- Upload date:
- Size: 20.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c56ec1598b1a99b0ee1c087502fcaf46b29c5477e26e37c1e3837c07e20426ba
|
|
| MD5 |
c85e4e7ea57b0fda1f3fc9c01ec98f5f
|
|
| BLAKE2b-256 |
c661347b4feb7a8852896af41fd4a88ee20266bca071a580574b83480e77e604
|