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
Базовый пример использования
Классическая запись в стиле python-docx
from py_docx_creator.core.document.document import Document
text = "Пример классической записи"
document = Document()
document.create_document("Документ.docx")
paragraph = document.add_paragraph_to_document(document)
run = document.add_run_to_paragraph(paragraph, text)
document.save_document()
Быстрая запись
Реализована быстрая запись с помощью метода write. При такой записи момент создания параграфа и наполнение run-а пропускается.
Стили в свою очередь для параграфа и текста в нем определяются классами стилей. В данном примере используются стандартные классы стилей
DefaultHeaderParagraphStyle для параграфа и DefaultHeaderTextStyle для текста в нем.
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()
Fluent запись
Реализована возможность записи в стиле Fluent где последовательно описываются стили записываемого параграфа и текста.
При таком подходе каждая запись оканчивается методом .add() который записывает параграф в документ с заданным текстом и возвращает картеж из записанного параграфа и run-a (tuple[Paragraph, Run]).
from py_docx_creator.core.document.document import Document
document = Document()
document.create_document("Документ.docx")
document.paragraph("Пример Fluent записи").size(32).bold(True).italic(True).line_spacing(12).alignment(AlignParagraph.CENTER).add()
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)
# Классическая запись
paragraph = doc.add_paragraph_to_document(doc)
run = doc.add_run_to_paragraph(paragraph, "Пример классической записи")
# Быстрая запись
doc.write(doc, "Пример быстрой записи", paragraph_style=DefaultHeaderParagraphStyle, text_style=DefaultHeaderTextStyle)
# Fluent запись
doc.paragraph("Пример Fluent записи").italic(True).size(18).first_line_indent(30).space_after(30).add()
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)
# Классическая запись
paragraph = doc.add_paragraph_to_document(doc)
run = doc.add_run_to_paragraph(paragraph, "Пример классической записи")
# Быстрая запись
doc.write(doc, "Пример быстрой записи", paragraph_style=DefaultHeaderParagraphStyle, text_style=DefaultHeaderTextStyle)
# Fluent запись
doc.paragraph("Пример Fluent записи").italic(True).size(18).first_line_indent(30).space_after(30).add()
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
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
...
)
или же:
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.5.tar.gz.
File metadata
- Download URL: py_docx_creator-0.2.0.5.tar.gz
- Upload date:
- Size: 16.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e391fabde19633d021b2650999fdabe5d34a84a996ae77ebe61e45b851be8a1b
|
|
| MD5 |
b12816388afab1779cbdccf96c7e1105
|
|
| BLAKE2b-256 |
9a4f1389ae148322da33193562aa0cf5b3e8a161b28d493290b118aad4f2dbc8
|
File details
Details for the file py_docx_creator-0.2.0.5-py3-none-any.whl.
File metadata
- Download URL: py_docx_creator-0.2.0.5-py3-none-any.whl
- Upload date:
- Size: 25.5 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 |
3ce1f084c39bd9c070dba4931268b2e43f50dc18a3ed8dcf8315af7230408387
|
|
| MD5 |
0a1cf9621d2280d3702156925f75fc9f
|
|
| BLAKE2b-256 |
7210f4ce97039dd45a64aebb5dc0e05530e46eb2ece79045f9327da2c56f09e5
|