Библиотека конвертации 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-fit—contain,coverdisplay—block,inline-blockfloat—left,right(обтекание текста)margin— внешние отступыborder-radius— скругление углов (реализовано через маску PNG)box-shadow— тень (реализована через Pillow)
Дополнительно:
- поддержка WebP → PNG
- поддержка srcset (выбор лучшего изображения)
- поддержка относительных путей через
<base href="..."> - автоматическое ограничение ширины и высоты страницы
Дополнительные возможности
- Автоматическая обработка
<base href="...">для относительных путей - Корректная работа с вложенными списками
- Поддержка layout‑таблиц (если указан CSS‑класс)
- Поддержка многоуровневых списков
- Поддержка inline‑стилей в
<span> - Корректная обработка HTML‑структуры через BeautifulSoup
За основу при создании HTML контента использовался
Пример использования при парсинге 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
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)
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 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a62600a652d750a3e8ef61bdfa84b5809071c64141dece33ddcb533463ac7891
|
|
| MD5 |
df12f1faa5cdc3ed7590a5044ab9e81e
|
|
| BLAKE2b-256 |
ae8f877c23fdfef2c7be8518612b7ae1f04240e4289d6f663aba04c1b3f7e7cb
|
File details
Details for the file html2docxconverter-0.1.8-py3-none-any.whl.
File metadata
- Download URL: html2docxconverter-0.1.8-py3-none-any.whl
- Upload date:
- Size: 19.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
877ef0655f6690aa16757137c23d075827ff21c9cacd96f6dc4323f1ad297dc0
|
|
| MD5 |
9fc0f948ef0bd78495055dd1606d646a
|
|
| BLAKE2b-256 |
5450aef80cad395110f50ec8f1613e5554bc18318b259922d8396ac4dfd60d63
|