Перенесите свои документы в AI‑конвейеры — напрямую из Python, локально, с помощью одной команды pip install.
Сегодня мы выпускаем первый публичный релиз GroupDocs.Markdown для Python через .NET на PyPI. Библиотека преобразует PDF, Word, Excel, EPUB и более 20 форматов в чистый, семантический Markdown — формат, с которым лучше всего работают LLM, RAG‑конвейеры и генераторы статических сайтов.
Если вы следили за .NET‑релизом от сентября (или за полным обновлением API в версии 26.3), то мотивы те же: форматирование документа несёт семантику, и сохранение этой семантической структуры — то, что позволяет системе RAG давать хорошие ответы. В предыдущем посте подробно рассматривались проблема (OCR уплощает структуру, LLM нужны markdown) и решение (рендерер на основе DOM, который проходит по документу и генерирует Markdown) — мы не будем повторять эту историю здесь.
Вместо этого сосредоточимся на новинках для разработчиков Python.
Что вы получаете
- Один единственный wheel, без зависимостей во время выполнения.
pip install groupdocs-markdown-netзагружает самодостаточный wheel, который включает .NET‑runtime и все необходимые нативные библиотеки. Нет необходимости устанавливатьdotnet, Microsoft Office, Adobe Acrobat или облачные сервисы. - Кроссплатформенность. Windows x64/x86, Linux x64, macOS x64 и Apple Silicon (ARM64). Python 3.5 – 3.14.
- Питонический API. Классы используют
PascalCase, методы и свойства —snake_case, значения перечислений —UPPER_SNAKE_CASE. Контекстные менеджеры детерминированно освобождают загруженные документы. - По‑настоящему асинхронный. Каждый статический и экземплярный метод имеет асинхронный аналог с суффиксом
_async. Операции ввода‑вывода файлов асинхронны, а CPU‑интенсивное преобразование выполняется в рабочем потоке — ваш цикл событийasyncioостаётся свободным. - Дружелюбный к AI‑агентам. Установленный wheel содержит файл
AGENTS.md, благодаря которому код‑ассистенты (Claude Code, Cursor, GitHub Copilot, Codex) автоматически обнаруживают API, идиоматические шаблоны использования и советы по устранению неполадок. Документация также публикуется какllms.txt, единый файл‑корпус (llms-full.txt), постраничный Markdown и MCP‑сервер — см. раздел AI‑friendly by design ниже для подробностей.
Начало работы
pip install groupdocs-markdown-net
Самое простое преобразование — однострочник:
from groupdocs.markdown import MarkdownConverter
# Преобразовать в строку
md = MarkdownConverter.to_markdown("business-plan.docx")
# Или записать сразу в файл
MarkdownConverter.to_file("business-plan.docx", "business-plan.md")
И всё — без конфигураций, без опций, без шаблонного кода. Режим оценки обрабатывает первые 3 страницы и добавляет водяной знак. Чтобы снять ограничения, примените лицензию:
from groupdocs.markdown import License
License().set_license("path/to/license.lic")
Или задайте переменную окружения GROUPDOCS_LIC_PATH, и лицензия будет применена автоматически при импорте.
Поддерживаемые форматы
Python‑пакет работает с тем же набором форматов, что и .NET‑библиотека:
- PDF —
.pdf - Word / Rich Text —
.doc,.docx,.docm,.dot,.dotx,.dotm,.rtf,.odt,.ott - Электронные таблицы —
.xls,.xlsx,.xlsb,.xlsm,.csv,.tsv,.ods,.ots - Электронные книги —
.epub,.mobi - Текст / разметка / справка —
.txt,.xml,.chm
Питонические примеры
Параметры конвертации и стратегии экспорта изображений
from groupdocs.markdown import (
MarkdownConverter,
ConvertOptions,
MarkdownFlavor,
ExportImagesToFileSystemStrategy,
)
strategy = ExportImagesToFileSystemStrategy("output/images")
strategy.images_relative_path = "images" # 
options = ConvertOptions()
options.flavor = MarkdownFlavor.GIT_HUB
options.heading_level_offset = 1 # # Title -> ## Title
options.include_front_matter = True # prepend YAML metadata
options.image_export_strategy = strategy
MarkdownConverter.to_file("report.docx", "output/report.md", convert_options=options)
Инспекция документа без конвертации
from groupdocs.markdown import MarkdownConverter
info = MarkdownConverter.get_info("business-plan.docx")
print(f"{info.file_format}, {info.page_count} pages, author: {info.author}")
Загрузка защищённого паролем файла
from groupdocs.markdown import MarkdownConverter, LoadOptions, FileFormat
load_opts = LoadOptions(FileFormat.DOCX)
load_opts.password = "secret"
MarkdownConverter.to_file("protected.docx", "output.md", load_options=load_opts)
Потоки и контекстные менеджеры
from groupdocs.markdown import MarkdownConverter
with open("document.docx", "rb") as stream:
with MarkdownConverter(stream) as converter:
converter.convert("document.md")
Асинхронный API — одновременная конвертация множества документов
Поскольку ввод‑вывод файлов асинхронен, asyncio.gather() позволяет одному рабочему процессу обрабатывать много документов без блокировок:
import asyncio
from groupdocs.markdown import MarkdownConverter
async def convert_many():
await asyncio.gather(
MarkdownConverter.to_file_async("a.docx", "a.md", None),
MarkdownConverter.to_file_async("b.pdf", "b.md", None),
MarkdownConverter.to_file_async("c.xlsx", "c.md", None),
)
asyncio.run(convert_many())
Это делает библиотеку естественным выбором для ASGI‑фреймворков вроде FastAPI — один воркер может обслуживать множество одновременных запросов конвертации без конкуренции за потоки.
Обработка ошибок
Все методы конвертации бросают исключения при неудаче, с отдельными типами для типичных сценариев:
from groupdocs.markdown import (
MarkdownConverter,
DocumentProtectedException,
InvalidFormatException,
GroupDocsMarkdownException,
)
try:
MarkdownConverter.to_file("annual-report.docx", "annual-report.md")
except DocumentProtectedException:
print("Wrong or missing password.")
except InvalidFormatException:
print("File is corrupt or unsupported.")
except GroupDocsMarkdownException as ex:
print(f"Conversion failed: {ex}")
Создано для RAG и LLM‑конвейеров
Markdown — предпочтительный входной формат для моделей эмбеддингов и конвейеров поиска — он сохраняет заголовки, списки, таблицы и выделения, оставаясь лёгким для разбиения и токенизации. Типичный процесс загрузки в RAG выглядит так:
import re
from groupdocs.markdown import MarkdownConverter, ConvertOptions, SkipImagesStrategy, MarkdownFlavor
options = ConvertOptions()
options.image_export_strategy = SkipImagesStrategy() # text-only for RAG
options.flavor = MarkdownFlavor.COMMON_MARK
MarkdownConverter.to_file("business-plan.pdf", "business-plan.md", convert_options=options)
with open("business-plan.md", "r", encoding="utf-8") as f:
markdown = f.read()
# Split by top-level headings, then embed/index each chunk
chunks = [c for c in re.split(r"\n#{1,2} ", markdown) if c.strip()]
Поскольку библиотека полностью работает локально, конфиденциальные документы никогда не покидают вашу среду — частое требование для регулируемых отраслей, юридических команд и внутренних баз знаний.
AI‑friendly by design
Большинство Python‑SDK рассматривают AI‑ассистентов как второстепенный момент — разработчику всё равно приходится указывать агенту документацию, копировать примеры или отлаживать методом проб и ошибок. GroupDocs.Markdown для Python через .NET меняет это: библиотека спроектирована так, чтобы такие агенты, как Claude Code, Cursor, GitHub Copilot и Codex, могли сразу её использовать без ручных настроек.
AGENTS.md поставляется внутри wheel
Это первый пакет GroupDocs, который включает файл AGENTS.md непосредственно в установленный wheel. Файл следует развивающемуся AGENTS.md‑конвенции — простому README в Markdown, написанному специально для AI‑ассистентов, а не для людей.
После выполнения pip install groupdocs-markdown-net файл окажется по пути:
site-packages/groupdocs/markdown/AGENTS.md
AI‑ассистент, открывающий ваш проект, может сразу прочитать его и узнать:
- Полный публичный API (классы, методы, перечисления, исключения) и их взаимосвязи.
- Идиоматические шаблоны для самых распространённых сценариев — статический vs экземплярный API, синхронный vs асинхронный, стратегии изображений, front‑matter, обработка ошибок.
- Распространённые подводные камни и способы их обхода — какие перегрузки
ConvertOptionsпринимаютNone, как работать с защищёнными паролем файлами, как получать предупреждения конвертации. - Устранение неполадок для платформенно‑специфических проблем (libSkiaSharp на macOS, ICU на Linux).
На практике это значит, что вы можете сказать «используй groupdocs-markdown-net, чтобы конвертировать эту папку PDF в Markdown для моего RAG‑конвейера», и агент сгенерирует рабочий код с первой попытки — без вымышленных имён методов, без неверного порядка аргументов, без угадывания импортов.
Машиночитаемая документация
Для агентов, которым нужно искать информацию, отсутствующую в AGENTS.md, полная документация также публикуется в машинно‑читаемом виде:
- Единый корпус — полные документы в одном объединённом файле Markdown, готовом к загрузке в контекст агента:
https://docs.groupdocs.com/markdown/python-net/llms-full.txt - Постраничный Markdown — добавьте
.mdк любой URL‑документации, чтобы получить исходный файл:
https://docs.groupdocs.com/markdown/python-net/quick-start-guide.md - Индекс
llms.txt— таблица содержания в стиле llms.txt, указывающая агенту нужные страницы:
https://docs.groupdocs.com/markdown/python-net/llms.txt
MCP‑сервер для живых запросов к документации
Для агентов, поддерживающих Model Context Protocol, мы предоставляем документацию через MCP‑сервер. Добавьте это в конфигурацию Claude Code или Cursor:
{
"mcpServers": {
"groupdocs-docs": {
"url": "https://docs.groupdocs.com/mcp"
}
}
}
После этого ваш агент сможет запрашивать документацию по требованию, а не полагаться на устаревшие обучающие данные.
Markdown в входе, Markdown на выходе
Здесь есть приятная симметрия: выход библиотеки — Markdown — формат, который LLM лучше всего обрабатывают в RAG, а её документация тоже в Markdown, предоставленная как единый файл для лёгкого захвата контекстом. Будь то запрос к агенту написать код, использующий библиотеку, или запрос к агенту понять ваши документы через библиотеку, Markdown служит общим посредником.
Пример экспорта
Приведённые выше фрагменты почти являются самым коротким полезным приложением, которое можно написать с этой библиотекой. Ниже тот же подход упакован в готовый проект — исходный документ, скрипт Python, заранее сгенерированный вывод, requirements.txt и Dockerfile — чтобы вы могли попробовать всё от начала до конца без написания кода с нуля.
Исходный DOCX
Исходный файл business-plan.docx — короткий, богато отформатированный бизнес‑план с заголовками, таблицами, изображениями и метаданными.
Скрипт Python
from groupdocs.markdown import MarkdownConverter, ConvertOptions, MarkdownFlavor
def quick_example():
"""Convert a Word document to Markdown with GitHub flavor and YAML front matter."""
# One-liner — returns a Markdown string
md = MarkdownConverter.to_markdown("business-plan.docx")
# With options — writes to a file
options = ConvertOptions()
options.flavor = MarkdownFlavor.GIT_HUB
options.include_front_matter = True
options.heading_level_offset = 1
MarkdownConverter.to_file("business-plan.docx", "quick-example.md", convert_options=options)
if __name__ == "__main__":
quick_example()
Выводной Markdown
Файл quick-example.md начинается с блока YAML‑front‑matter, автоматически извлечённого из метаданных документа, за которым следует преобразованное содержимое с таблицами GitHub‑flavored и смещённой иерархией заголовков (готовое к встраиванию в более крупный документ).
Запускаемое примерное приложение
Всё упаковано вместе: sample-app.zip. Распакуйте, затем:
cd src
python -m venv .venv
# Windows: .venv\Scripts\activate
# Linux/macOS: source .venv/bin/activate
pip install -r requirements.txt
python quick_example.py
Или запустите в Docker — включённый Dockerfile устанавливает зависимость ICU, необходимую .NET‑runtime на Linux:
cd src
docker build -t groupdocs-markdown-python-example .
docker run --rm -v "$(pwd)/output:/app/output" groupdocs-markdown-python-example
Итоги
GroupDocs.Markdown для Python через .NET переносит полностью готовый движок конвертации документов в Markdown в мир Python как самодостаточный wheel — без внешних рантаймов, без облака, без сюрпризов. Питонический API, поддержка async и первоклассная интеграция с AI‑инструментами делают её практичным выбором для команд Python, создающих RAG‑системы, генераторы статических сайтов или конвейеры обработки документов.
Узнать больше
- Пакет PyPI: https://pypi.org/project/groupdocs-markdown-net/
- Главная страница продукта: https://products.groupdocs.com/markdown/python-net/
- Документация: https://docs.groupdocs.com/markdown/python-net/
- Примечания к релизу: https://releases.groupdocs.com/markdown/python-net/release-notes/
- Примеры кода на GitHub: https://github.com/groupdocs-markdown/GroupDocs.Markdown-for-Python-via-.NET
- Информация о лицензии: https://about.groupdocs.com/legal/
- Связанный пост о .NET‑релизе: GroupDocs.Markdown for .NET — First Public Release
Поддержка и обратная связь
По вопросам или технической помощи, пожалуйста, используйте наш Free Support Forum — будем рады помочь.