Skip to main content

Конвертирует HTML в DOCX с сохранением стилей: списков, таблиц, шрифтов, цветов и т.д.

Project description

Библиотека конвертации HTML в DOCX

Python-библиотека для преобразования HTML-контента в документы Word (.docx) с поддержкой таблиц, списков, изображений и CSS-стилей.

Установка

pip install html2docxconverter
uv add html2docxconverter

Поддерживаемые HTML-теги

Основные теги

  • <p> - абзацы текста
  • <figure> - контейнеры для изображений
  • <ul> - неупорядоченные списки
  • <ol> - упорядоченные списки
  • <li> - элементы списков
  • <table> - таблицы
  • <tr> - строки таблицы
  • <td> - ячейки таблицы
  • <th> - заголовочные ячейки таблицы
  • <colgroup> - группировка столбцов таблицы
  • <col> - определение столбца таблицы
  • <tbody> - тело таблицы
  • <img> - изображения (поддержка src, srcset, data URI, относительных путей)

Теги форматирования текста

  • <strong>, <b> - жирный текст
  • <em>, <i> - курсив
  • <u> - подчеркнутый текст
  • <s>, <strike>, <del> - зачеркнутый текст
  • <sup> - верхний индекс
  • <sub> - нижний индекс
  • <span> - контейнер для стилизации текста

Поддерживаемые CSS-стили

Стили текста

  • color - цвет текста (имена цветов, hex, rgb)
  • background-color - выделение цветом (имена цветов, hex, rgb)
  • font-size - размер шрифта (px, pt, em, %)
  • text-align - выравнивание текста (left, right, center, justify)
  • vertical-align - вертикальное выравнивание (top, middle, bottom)

Стили таблиц и ячеек

  • width - ширина таблицы/ячейки (px, %)
  • height - высота строки/ячейки (px)
  • background-color - цвет фона таблицы/ячейки
  • border - граница (ширина стиль цвет)
  • border-width - ширина границы
  • border-style - стиль границы (solid, single)
  • border-color - цвет границы
  • float - позиционирование таблицы (left, right)

Стили изображений

  • width — ширина изображения (px, %, em)
  • height — высота изображения (px, em)
  • aspect-ratio — сохранение пропорций
  • object-fitcontain, cover
  • displayblock, inline-block
  • floatleft, right (обтекание текста)
  • margin — внешние отступы
  • border-radius — скругление углов (реализовано через маску PNG)
  • box-shadow — тень (реализована через Pillow)

Дополнительно:

  • поддержка WebP → PNG
  • поддержка srcset (выбор лучшего изображения)
  • поддержка относительных путей через <base href="...">
  • автоматическое ограничение ширины и высоты страницы

Дополнительные возможности

  • Автоматическая обработка <base href="..."> для относительных путей
  • Корректная работа с вложенными списками
  • Поддержка layout‑таблиц (если указан CSS‑класс)
  • Поддержка многоуровневых списков
  • Поддержка inline‑стилей в <span>
  • Корректная обработка HTML‑структуры через BeautifulSoup

За основу при создании HTML контента использовался

CKEditor

Пример использования при парсинге HTML

from docx import Document
from htmltodocx import HTMLtoDocx

# Создание нового документа
doc = Document()

# HTML-контент для конвертации
html_content = """
<p>Это <strong>жирный</strong> и <em>курсивный</em> текст.</p>
<ul>
    <li>Первый элемент</li>
    <li>Второй элемент</li>
</ul>
"""

# Конвертация HTML в DOCX
converter = HTMLtoDocx(doc)
converted_doc = converter.parse_html(html_content)

# Сохранение документа
doc.save("output.docx")

Пример использования при получении HTML страницы по url

from docx import Document
from htmltodocx import HTMLtoDocx

# Создание нового документа
doc = Document()
# Получение HTML и конвертация в DOCX
converter = HTMLtoDocx(doc)
converted_doc = converter.parse_url('https://habr.com/en/news/930292/')

# Сохранение документа
doc.save("output.docx")

Настройки форматирования

from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from htmltodocx.schemas import ConfigSchema, DefaultTableStyleSchema, DefaultConfigSchema
from docx import Document
from htmltodocx import HTMLtoDocx

align_map = {
    "left": WD_PARAGRAPH_ALIGNMENT.LEFT,
    "center": WD_PARAGRAPH_ALIGNMENT.CENTER,
    "right": WD_PARAGRAPH_ALIGNMENT.RIGHT,
    "justify": WD_PARAGRAPH_ALIGNMENT.JUSTIFY,
}

align_image_class_map = {
    "image-style-block-align-left": WD_PARAGRAPH_ALIGNMENT.LEFT,
    "image-style-block-align-right": WD_PARAGRAPH_ALIGNMENT.RIGHT,
    "image-style-block-align-center": WD_PARAGRAPH_ALIGNMENT.CENTER,
}

vertical_align_map = {"top": "top", "middle": "center", "bottom": "bottom"}

border_side = ["top", "left", "bottom", "right"]

border_style = {
    "none": "nil",
    "solid": "single",
    "dotted": "dotted",
    "dashed": "dash",
    "double": "double",
    "groove": "threeDEmboss",
    "ridge": "threeDEngrave",
    "inset": "inset",
    "outset": "outset",
}

default_settings = DefaultConfigSchema(
    align_paragraph=WD_PARAGRAPH_ALIGNMENT.JUSTIFY,
    align_image=WD_PARAGRAPH_ALIGNMENT.CENTER,
    vertical_align='center',
    table_style=DefaultTableStyleSchema(
        width="1pt", style="single", color="000000"
    )
)

base_config = ConfigSchema(
    align_map=align_map,
    align_image_class_map=align_image_class_map,
    vertical_align_map=vertical_align_map,
    border_side=border_side,
    border_style=border_style,
    default_settings=default_settings
)
# HTML-контент для конвертации
html_content = """
<p>Это <strong>жирный</strong> и <em>курсивный</em> текст.</p>
<ul>
    <li>Первый элемент</li>
    <li>Второй элемент</li>
</ul>
"""

# Конвертация HTML в DOCX
doc = Document()
converter = HTMLtoDocx(doc, config=base_config, layout_table_class='layout-table', message_start='HTML контент: ')
converted_doc = converter.parse_html(html_content)
par = doc.add_paragraph()
par.add_run('Hello World!')
# Сохранение документа
doc.save("output.docx")

Лицензия

MIT License

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

html2docxconverter-0.1.8.tar.gz (17.9 kB view details)

Uploaded Source

Built Distribution

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

html2docxconverter-0.1.8-py3-none-any.whl (19.9 kB view details)

Uploaded Python 3

File details

Details for the file html2docxconverter-0.1.8.tar.gz.

File metadata

  • Download URL: html2docxconverter-0.1.8.tar.gz
  • Upload date:
  • Size: 17.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for html2docxconverter-0.1.8.tar.gz
Algorithm Hash digest
SHA256 a62600a652d750a3e8ef61bdfa84b5809071c64141dece33ddcb533463ac7891
MD5 df12f1faa5cdc3ed7590a5044ab9e81e
BLAKE2b-256 ae8f877c23fdfef2c7be8518612b7ae1f04240e4289d6f663aba04c1b3f7e7cb

See more details on using hashes here.

File details

Details for the file html2docxconverter-0.1.8-py3-none-any.whl.

File metadata

File hashes

Hashes for html2docxconverter-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 877ef0655f6690aa16757137c23d075827ff21c9cacd96f6dc4323f1ad297dc0
MD5 9fc0f948ef0bd78495055dd1606d646a
BLAKE2b-256 5450aef80cad395110f50ec8f1613e5554bc18318b259922d8396ac4dfd60d63

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