Skip to main content

Генерация документов Word (.docx), оформленных по ГОСТ 7.32-2017

Project description

gost-docx

Генерация документов Word (.docx), оформленных по ГОСТ 7.32-2017: Times New Roman 14 pt, полуторный интервал, красная строка 1,25 см, сквозная нумерация заголовков, рисунков и таблиц, подписи «Рисунок N — …» и «Таблица N — …», перенос длинных таблиц с надписью «Продолжение таблицы N».

Документ собирается из элементов, а нумерация проставляется автоматически — вручную считать номера рисунков и таблиц не нужно.

Установка

pip install gost-docx

Требуется Python 3.12 или новее.

Для автоподбора точек разрыва таблиц (split_after="auto") нужен Windows с установленным Word:

pip install "gost-docx[autosplit]"

Быстрый старт

from pathlib import Path

from gost import WordBuilder
from gost.element_factory import ElementFactory

wb = WordBuilder()
factory = ElementFactory()

wb.add_element(factory.create_head(True, "Введение", 1))
wb.add_element(factory.create_text("Обычный абзац с **жирным** фрагментом."))
wb.add_element(factory.create_table(
    {"Имя": ["Алиса", "Боб"], "Возраст": [25, 30]},
    title="Пример таблицы",
))

wb.save(Path("report.docx"))

Элементы документа

Все элементы создаются через ElementFactory — он же ведёт счётчики номеров.

Метод Что добавляет
create_text(text) Абзац. Фрагменты в **звёздочках** становятся жирными.
create_head(use_numbers, text, level) Заголовок уровня 0–4. Уровень 0 — по центру, прописными, без номера.
create_image(path, alt) Рисунок с подписью «Рисунок N — alt».
create_table(data, title, ...) Таблица с подписью «Таблица N — title».
create_page_break(break_type) Разрыв страницы или раздела.

Нумерация

Режим нумерации задаётся при создании IndexManager и передаётся в фабрику:

from gost.element_factory import ElementFactory
from gost.index.index_manager import IndexManager
from gost.index.index_type import IndexType

# Сквозная нумерация по всему документу: Таблица 1, Таблица 2, ...
factory = ElementFactory(IndexManager(index_type=IndexType.CONTINUOUS))

# Нумерация внутри главы: Таблица 1.1, Таблица 1.2, Таблица 2.1, ...
factory = ElementFactory(IndexManager(index_type=IndexType.CHAPTER_RELATIVE))

# С буквенным префиксом (приложения): Таблица А.1, Таблица А.2, ...
factory = ElementFactory(IndexManager(character="А"))

Таблицы

wb.add_element(factory.create_table(
    data,                        # Mapping[str, Sequence[Any]]: заголовок столбца -> значения
    title="Себестоимость",
    show_header=True,            # строка с именами столбцов
    show_row_numbers=True,       # столбец «№ п/п»
    show_column_numbers=True,    # строка с номерами столбцов
    split_after=[16],            # после каких строк переносить таблицу на новую страницу
))

Значения приводятся к строке через str(), поэтому числа форматируйте заранее: [f"{v:.2f}" for v in values].

split_after="auto" подбирает точки разрыва измерением: save() рендерит документ, спрашивает у Word, на какой странице оказалась каждая строка, и ставит разрыв ровно по краю страницы. Это работает только на Windows с установленным Word, требует gost-docx[autosplit] и заметно медленнее обычной сборки.

Примеры

В каталоге examples/ лежат запускаемые скрипты со всеми стилями:

python examples/example.py            # все элементы и стили -> examples/example.docx
python examples/autosplit_example.py  # split_after="auto" (нужен Windows + Word)

Разработка

Проект использует uv.

git clone git@github.com:Paralamg/gost.git
cd gost
uv sync
uv run python examples/example.py

Публикация на PyPI

Сборка выполняется бэкендом uv_build, публикация — командой uv publish.

1. Подготовка

Перед выпуском поднимите версию в pyproject.toml (поле version) — PyPI не разрешает повторно загрузить уже опубликованную версию, даже после удаления файла.

Получите API-токен: pypi.org/manage/account/token (и отдельный — на test.pypi.org для тестовой площадки). Токен начинается с pypi-. Передавайте его через переменную окружения, а не аргументом командной строки — так он не попадёт в историю оболочки:

# PowerShell
$env:UV_PUBLISH_TOKEN = "pypi-AgEIcHl..."
# bash
export UV_PUBLISH_TOKEN="pypi-AgEIcHl..."

2. Сборка

uv build

Артефакты появятся в dist/: gost_docx-<версия>-py3-none-any.whl и gost_docx-<версия>.tar.gz. Если в dist/ остались файлы прошлого выпуска, очистите каталог — uv publish загружает всё, что там лежит:

Remove-Item -Recurse -Force dist   # PowerShell
rm -rf dist                        # bash

3. Проверка на TestPyPI (рекомендуется)

uv publish --publish-url https://test.pypi.org/legacy/

Установка из TestPyPI — зависимости при этом берутся с основного PyPI:

pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ gost-docx

4. Публикация

uv publish

Проверка установки из PyPI в чистом окружении:

uv run --with gost-docx --no-project -- python -c "from gost import WordBuilder; print(WordBuilder())"

5. Тег релиза

git tag v0.1.0
git push origin v0.1.0

Лицензия

MIT — см. LICENSE.txt.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gost_docx-0.2.5.tar.gz (20.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gost_docx-0.2.5-py3-none-any.whl (30.1 kB view details)

Uploaded Python 3

File details

Details for the file gost_docx-0.2.5.tar.gz.

File metadata

  • Download URL: gost_docx-0.2.5.tar.gz
  • Upload date:
  • Size: 20.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for gost_docx-0.2.5.tar.gz
Algorithm Hash digest
SHA256 a2bcfa59bf5eceeb2b7480ff8b2384f2082fb5117dc00b68133677e910aab13a
MD5 a364043208beb1465dd54de58504e751
BLAKE2b-256 fb068b2d2e7d6bd594b3a2bdc4cfd93e5fd1f8baf342244fc0ce01aefec0cd43

See more details on using hashes here.

File details

Details for the file gost_docx-0.2.5-py3-none-any.whl.

File metadata

  • Download URL: gost_docx-0.2.5-py3-none-any.whl
  • Upload date:
  • Size: 30.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for gost_docx-0.2.5-py3-none-any.whl
Algorithm Hash digest
SHA256 fe657a09fcdce3eb53543eee8f3bbd1c3005c1b1fc6c641760e62851a4002e0f
MD5 2f1e21251f2b99087fcbcc72790a2967
BLAKE2b-256 831b29a50b9e549a188092ab6d655bde2a6fb3c71220b09a3a6e9614c6b3f298

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page