Конвертирует 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-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
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)
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
|