GroupDocs.Editor for Python via .NET - Edit documents in any format via HTML
Project description
Product Page | Docs | Demos | API Reference | Blog | Free Support | Temporary License
GroupDocs.Editor for Python via .NET is a document-editing API built around an HTML round-trip: load a document, convert it to clean, editable HTML/CSS, edit that markup in any WYSIWYG editor or programmatically, then save it back to the original format — or convert it to another. It works with Word processing, spreadsheets, presentations, PDF, email, eBooks, and text/markup formats through one unified API, with no MS Office or OpenOffice installation required.
Get Started
pip install groupdocs-editor-net
from groupdocs.editor import Editor
with Editor("document.docx") as editor:
editable = editor.edit()
html = editable.get_body_content()
print(html)
How It Works
The package is a self-contained Python wheel (~120 MB) that bundles the embedded .NET runtime and every native dependency (SkiaSharp, Aspose.Drawing) needed to load, render, and save documents. No external software installation is required — just pip install and start editing. The wheel works across Python 3.5 – 3.14 on Windows, Linux, and macOS (Intel + Apple Silicon).
Features
- HTML round-trip editing — convert any supported document to editable HTML/CSS and save it back without losing fidelity.
- Multi-format — Word processing, spreadsheets, presentations, PDF, email, eBooks, and text/markup, all behind one API.
- Format conversion — save an edited document with a different
*SaveOptionsto convert it (e.g. DOCX → PDF, DOCX → Markdown) via the HTML intermediate. - Granular editing — edit a single worksheet, a single slide, or a page range; toggle pagination and language metadata.
- Resource extraction — pull out a document's images, fonts, CSS, and audio as separate resources.
- Document introspection — read format, page count, size, and encryption status without a full edit pass.
- Form fields — inspect and update Word-processing form fields.
- Cross-Platform — Windows x64/x86, Linux x64, macOS x64/ARM64.
Common Tasks
- Round-trip edit a DOCX: open it, change the HTML body, save it back to DOCX
- Convert a document to another format via HTML (DOCX → PDF, XLSX → HTML, MD → DOCX)
- Edit one worksheet of a workbook or one slide of a deck at a time
- Extract the embedded images, fonts, and stylesheets from a document
- Read a file's format, page count, and encryption state before processing
- Build an editable document from your own HTML and export it to Office formats
Supported File Formats
For a complete list, see supported formats.
| Category | Formats |
|---|---|
| Word Processing | DOC, DOCX, DOCM, DOT, DOTX, DOTM, ODT, OTT, RTF, WordML, FlatOPC |
| Spreadsheets | XLS, XLT, XLSX, XLSM, XLSB, XLTX, XLTM, XLAM, SpreadsheetML, ODS, FODS, SXC, DIF, CSV, TSV |
| Presentations | PPT, PPTX, PPTM, PPS, PPSX, PPSM, POT, POTX, POTM, ODP, OTP |
| Fixed-Layout | PDF, XPS |
| EML, EMLX, MSG, MBOX, MHT/MHTML, PST, OST, OFT, TNEF, ICS, VCF | |
| eBooks | EPUB, MOBI, AZW3 |
| Text & Markup | HTML, MHTML, CHM, XML, JSON, Markdown (MD), TXT |
Examples
Open a document and extract its body content
from groupdocs.editor import Editor
from groupdocs.editor.options import WordProcessingLoadOptions
with Editor("input.docx", WordProcessingLoadOptions()) as editor:
editable = editor.edit()
body = editable.get_body_content()
print("body length:", len(body))
Get document info
from groupdocs.editor import Editor
with Editor("input.docx") as editor:
info = editor.get_document_info()
print("Format:", info.format.name)
print("Extension:", info.format.extension)
print("Pages:", info.page_count)
print("Size:", info.size, "bytes")
print("Encrypted:", info.is_encrypted)
get_document_info() returns a lightweight view that supports both snake_case attribute access (shown above) and dict access (info["PageCount"], info["Format"]["Name"]) for the underlying PascalCase keys.
Edit with options (no pagination, keep language info)
from groupdocs.editor import Editor
from groupdocs.editor.options import WordProcessingLoadOptions, WordProcessingEditOptions
with Editor("input.docx", WordProcessingLoadOptions()) as editor:
eo = WordProcessingEditOptions()
eo.enable_pagination = False
eo.enable_language_information = True
html = editor.edit(eo).get_content()
print(len(html))
Round-trip edit and save back to DOCX
from groupdocs.editor import Editor, EditableDocument
from groupdocs.editor.formats import WordProcessingFormats
from groupdocs.editor.options import WordProcessingSaveOptions
with Editor("input.docx") as editor:
editable = editor.edit()
edited_html = editable.get_embedded_html().replace("Subtitle", "Edited subtitle")
after_edit = EditableDocument.from_markup(edited_html)
editor.save(after_edit, "output.docx", WordProcessingSaveOptions(WordProcessingFormats.DOCX))
Convert via HTML: DOCX → PDF
from groupdocs.editor import Editor
from groupdocs.editor.options import PdfSaveOptions
with Editor("input.docx") as editor:
editable = editor.edit()
editor.save(editable, "output.pdf", PdfSaveOptions())
Edit a specific worksheet of a workbook
from groupdocs.editor import Editor
from groupdocs.editor.options import SpreadsheetLoadOptions, SpreadsheetEditOptions
with Editor("book.xlsx", SpreadsheetLoadOptions()) as editor:
eo = SpreadsheetEditOptions()
eo.worksheet_index = 0 # 0-based
html = editor.edit(eo).get_body_content()
print(len(html))
Load from a binary stream
import io
from groupdocs.editor import Editor
from groupdocs.editor.options import WordProcessingLoadOptions
with open("input.docx", "rb") as stream:
with Editor(stream, WordProcessingLoadOptions()) as editor:
html = editor.edit().get_content()
print(len(html))
AI Agent & LLM Friendly
This package is designed for seamless integration with AI agents, LLMs, and automated code generation tools.
AGENTS.mdin the package — AI coding assistants (Claude Code, Cursor, GitHub Copilot) auto-discover the API surface, usage patterns, and troubleshooting tips from the installed package- MCP server — connect your AI tool to GroupDocs documentation for on-demand API lookups:
{ "mcpServers": { "groupdocs-docs": { "url": "https://docs.groupdocs.com/mcp" } } }
- Machine-readable docs — full documentation available as plain text for RAG and LLM context:
- Single file:
https://docs.groupdocs.com/editor/python-net/llms-full.txt - Per page: append
.mdto any docs URL
- Single file:
Evaluation Mode
The API works without a license in evaluation mode, with these limitations:
- Output is restricted: PDF output carries an evaluation watermark and other formats show an equivalent evaluation mark.
- A page/document-count cap applies to processed documents.
To remove these limitations, apply a license or request a temporary license:
from groupdocs.editor import License
License().set_license("path/to/license.lic")
Or set the environment variable (auto-applied at import):
export GROUPDOCS_LIC_PATH="path/to/license.lic"
Troubleshooting
| Issue | Platform | Fix |
|---|---|---|
System.Drawing.Common is not supported |
Linux/macOS | apt-get install libgdiplus (Linux) or brew install mono-libgdiplus (macOS) |
The type initializer for 'Gdip' threw an exception |
macOS | brew install mono-libgdiplus |
| Garbled text / missing fonts in output | Linux | apt-get install ttf-mscorefonts-installer fontconfig && fc-cache -f |
DOTNET_SYSTEM_GLOBALIZATION_INVARIANT errors |
Linux | Do NOT set this variable. ICU must be available. |
System Requirements
- Python 3.5 - 3.14
- Windows x64/x86, Linux x64, macOS x64/ARM64
More Resources
Also available for other platforms: .NET | Java | Node.js
Product Page | Docs | Demos | API Reference | Blog | Free Support | Temporary License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
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 groupdocs_editor_net-0.0.0-py3-none-any.whl.
File metadata
- Download URL: groupdocs_editor_net-0.0.0-py3-none-any.whl
- Upload date:
- Size: 4.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
51c5151333354f9defea705464ec88614851c96206c5d0d1791803b20703dba9
|
|
| MD5 |
8957bf8502a5cec79230420287dbcd3e
|
|
| BLAKE2b-256 |
59eaa90ec4a9dc658da05601b5b03c85bdf2dec5759df9e47bc2375c16b2093e
|