Browse our Products

If so you can download any of the below versions for testing. The product will function as normal except for an evaluation limitation. At the time of purchase we provide a license file via email that will allow the product to work in its full capacity. If you would also like an evaluation license to test without any restrictions for 30 days, please follow the directions provided here.

GroupDocs.Annotation for Python via .NET Downloads

banner

PyPI PyPI - Python Version

Product Page | Docs | Demos | API Reference | Blog | Free Support | Temporary License

GroupDocs.Annotation for Python via .NET is a document-annotation API for adding, editing, and removing markup on documents and images. Draw area, point, arrow, ellipse, and distance shapes; highlight, underline, strikeout, squiggly, and replace text; add watermarks, images, links, and text fields; thread review comments (replies) on any annotation; then save the result back to the original format or export/import the annotations as XML — across PDF, Word, Excel, PowerPoint, Visio, images, and more through one unified API, with no MS Office or other external software required.

Get Started

pip install groupdocs-annotation-net
from groupdocs.annotation import Annotator
from groupdocs.annotation.models.annotation_models import AreaAnnotation
from groupdocs.annotation.models import Rectangle

with Annotator("document.pdf") as annotator:
    area = AreaAnnotation()
    area.box = Rectangle(100, 100, 200, 80)   # x, y, width, height
    area.page_number = 0
    area.message = "Review this section"
    annotator.add(area)
    annotator.save("annotated.pdf")

How It Works

The package is a self-contained Python wheel that bundles the embedded .NET runtime and every native dependency (SkiaSharp, Aspose.Drawing) needed to load, annotate, render, and save documents. No external software installation is required — just pip install and start annotating. The wheel works across Python 3.5 – 3.14 on Windows, Linux, and macOS (Intel + Apple Silicon).

Features

  • Shape annotations — area, point, arrow, ellipse, polyline, and distance markups with configurable box, color, pen style, and opacity.
  • Text markup — highlight, underline, strikeout, squiggly, replacement, and redaction annotations over document text.
  • Content annotations — watermarks, image stamps, link annotations, and editable text-field annotations.
  • Comments & replies — thread review comments on any annotation, each with an author and timestamp.
  • Add / update / remove — full lifecycle on annotations, individually or in batches, addressed by object or id.
  • Versioning — read back annotation versions and a specific version’s annotations.
  • Import / export — round-trip annotations to/from an XML file or another document, separate from the source.
  • Previews — render pages to PNG/JPEG/BMP images via a page-stream callback.
  • Document introspection — read format, page count, and per-page dimensions before processing.
  • Cross-Platform — Windows x64/x86, Linux x64, macOS x64/ARM64.

Common Tasks

  • Add a colored box or arrow over a region of a PDF page and save it back
  • Highlight, underline, or strike out a passage of text in a document
  • Stamp a watermark or an image annotation onto a page
  • Attach a thread of review comments (replies) to an annotation
  • List, update, or remove the annotations already on a document
  • Export a document’s annotations to XML and re-import them later
  • Render annotated pages to images for a preview UI

Supported File Formats

For a complete list, see supported formats.

CategoryFormats
Word ProcessingDOC, DOCX, DOCM, DOT, DOTX, DOTM, RTF, ODT, OTT, TXT
SpreadsheetsXLS, XLSX, XLSM, XLSB, ODS, CSV
PresentationsPPT, PPTX, PPTM, PPS, PPSX, ODP
Fixed-LayoutPDF, TEX
DiagramsVSD, VSDX, VSS, VSSX, VSDM
ImagesBMP, JPG, JPEG, PNG, GIF, TIFF, WEBP, DCM, EMF, WMF
Web & EmailHTML, MHTML, EML, EMLX, MSG

Examples

Add an area annotation

from groupdocs.annotation import Annotator
from groupdocs.annotation.models.annotation_models import AreaAnnotation
from groupdocs.annotation.models import Rectangle

with Annotator("document.pdf") as annotator:
    area = AreaAnnotation()
    area.box = Rectangle(100, 100, 200, 80)     # x, y, width, height
    area.background_color = 65535               # ARGB integer
    area.page_number = 0
    area.message = "Needs review"
    annotator.add(area)
    annotator.save("annotated.pdf")

Attach review comments (replies)

from groupdocs.annotation import Annotator
from groupdocs.annotation.models.annotation_models import AreaAnnotation
from groupdocs.annotation.models import Rectangle, Reply

reply1 = Reply(); reply1.comment = "Please double-check the figures"
reply2 = Reply(); reply2.comment = "Confirmed — looks good"

with Annotator("document.pdf") as annotator:
    area = AreaAnnotation()
    area.box = Rectangle(80, 80, 160, 60)
    area.page_number = 0
    area.replies = [reply1, reply2]
    annotator.add(area)
    annotator.save("reviewed.pdf")

List, update and remove annotations

from groupdocs.annotation import Annotator

with Annotator("annotated.pdf") as annotator:
    annotations = annotator.get()              # all annotations on the document
    for a in annotations:
        print(a.id, a.page_number, a.message)
    if annotations:
        annotator.remove(annotations[0])        # by object (or annotator.remove(id))
    annotator.save("cleaned.pdf")

Read annotation versions

from groupdocs.annotation import Annotator

with Annotator("annotated.pdf") as annotator:
    versions = annotator.get_versions_list()    # available annotation versions
    for v in versions:
        print("version:", v)
        for a in annotator.get_version(v):      # annotations in that version
            print("  ", a.id, a.message)

Render a page preview

from groupdocs.annotation import Annotator
from groupdocs.annotation.options import PreviewOptions, PreviewFormats

def create_page_stream(page_number):
    return open(f"page-{page_number}.png", "wb")

with Annotator("document.pdf") as annotator:
    opts = PreviewOptions(create_page_stream)
    opts.preview_format = PreviewFormats.PNG
    opts.page_numbers = [0, 1]
    annotator.document.generate_preview(opts)

Annotate from / to a binary stream

import io
from groupdocs.annotation import Annotator
from groupdocs.annotation.models.annotation_models import AreaAnnotation
from groupdocs.annotation.models import Rectangle

with open("document.pdf", "rb") as src:
    with Annotator(src) as annotator:
        area = AreaAnnotation(); area.box = Rectangle(50, 50, 120, 40); area.page_number = 0
        annotator.add(area)
        buffer = io.BytesIO()
        annotator.save(buffer)          # BytesIO is updated after save
        data = buffer.getvalue()

AI Agent & LLM Friendly

This package is designed for seamless integration with AI agents, LLMs, and automated code generation tools.

  • AGENTS.md in 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/annotation/python-net/llms-full.txt
    • Per page: append .md to any docs URL

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.annotation 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

IssuePlatformFix
Evaluation watermark on outputAllApply a license — License().set_license(...) or set GROUPDOCS_LIC_PATH
System.Drawing.Common is not supportedLinux/macOSapt-get install libgdiplus (Linux) or brew install mono-libgdiplus (macOS)
The type initializer for 'Gdip' threw an exceptionmacOSbrew install mono-libgdiplus
Garbled text / missing fonts in outputLinuxapt-get install ttf-mscorefonts-installer fontconfig && fc-cache -f
DOTNET_SYSTEM_GLOBALIZATION_INVARIANT errorsLinuxDo NOT set this variable. ICU must be available.

System Requirements

  • Python 3.5 - 3.14
  • Windows x64/x86, Linux x64, macOS x64/ARM64
  • No additional software required

More Resources

Also available for other platforms: .NET | Java | Node.js


Product Page | Docs | Demos | API Reference | Blog | Free Support | Temporary License


Direct Download

Icons

GroupDocs.Annotation for Python via .NET 26.6 Windows

Self-contained Python wheel of GroupDocs.Annotation 26.6 for Windows (x64). Compatible with Python 3.5-3.14. No external dependencies required. Add annotations, markups and comments to documents and images.

Added: 18/6/2026 Downloads:

Download

File Size: 144.03MB

Icons

GroupDocs.Annotation for Python via .NET 26.6 Linux

Self-contained Python wheel of GroupDocs.Annotation 26.6 for Linux (x64). Compatible with Python 3.5-3.14. Requires libgdiplus, libfontconfig1, and fonts (e.g. ttf-mscorefonts-installer). Add annotations, markups and comments to documents and images.

Added: 18/6/2026 Downloads:

Download

File Size: 143.38MB

Icons

GroupDocs.Annotation for Python via .NET 26.6 macOS arm64

Self-contained Python wheel of GroupDocs.Annotation 26.6 for macOS arm64 (Apple Silicon). Compatible with Python 3.5-3.14. Requires mono-libgdiplus (brew install mono-libgdiplus). Add annotations, markups and comments to documents and images.

Added: 18/6/2026 Downloads:

Download

File Size: 143.2MB

Icons

GroupDocs.Annotation for Python via .NET 26.6 macOS amd64

Self-contained Python wheel of GroupDocs.Annotation 26.6 for macOS amd64 (Intel). Compatible with Python 3.5-3.14. Requires mono-libgdiplus (brew install mono-libgdiplus). Add annotations, markups and comments to documents and images.

Added: 18/6/2026 Downloads:

Download

File Size: 145.32MB