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.
If you experience errors, when you try to download a file, make sure your network policies (enforced by your company or ISP) allow downloading ZIP and/or MSI files.
Product Page | Docs | Demos | API Reference | Blog | Free Support | Temporary License
GroupDocs.Watermark for Python via .NET is a document-watermarking API for adding, searching, and removing text and image watermarks. Stamp configurable text or image watermarks — with control over position, size, opacity, rotation, alignment, and tiling — then save the result back to the original format; search for and remove existing watermarks (including ones added by other tools) across PDF, Word, Excel, PowerPoint, Visio, email, and image formats through one unified API, with no MS Office or other external software required.
pip install groupdocs-watermark-net
from groupdocs.watermark import Watermarker
from groupdocs.watermark.watermarks import TextWatermark, Font
with Watermarker("document.pdf") as watermarker:
watermark = TextWatermark("CONFIDENTIAL", Font("Arial", 36.0))
watermark.opacity = 0.5
watermarker.add(watermark)
watermarker.save("watermarked.pdf")
The package is a self-contained Python wheel that bundles the embedded .NET runtime and the native libraries it ships (SkiaSharp, Aspose.Drawing) to load, watermark, render, and save documents. On Windows nothing else is needed; on Linux and macOS a few system packages are - see System Requirements. The wheel works across Python 3.5 - 3.14 on 64-bit Windows, Linux, and macOS (Intel + Apple Silicon).
For a complete list, see supported formats.
| Category | Formats |
|---|---|
| Word Processing | DOC, DOCX, DOCM, DOT, DOTX, RTF, ODT |
| Spreadsheets | XLS, XLSX, XLSM, XLSB |
| Presentations | PPT, PPTX, PPTM, PPS, PPSX |
| Fixed-Layout | |
| Diagrams | VSD, VSDX, VSS, VDX |
| MSG, EML, EMLX | |
| Images | BMP, JPG, JPEG, PNG, GIF, TIFF, WEBP |
from groupdocs.watermark import Watermarker
from groupdocs.watermark.watermarks import TextWatermark, Font, Color
with Watermarker("document.pdf") as watermarker:
watermark = TextWatermark("CONFIDENTIAL", Font("Arial", 48))
watermark.foreground_color = Color.red
watermark.opacity = 0.5
watermark.rotate_angle = -45
watermarker.add(watermark)
watermarker.save("watermarked.pdf")
from groupdocs.watermark import Watermarker
from groupdocs.watermark.watermarks import ImageWatermark, SizingType
with Watermarker("document.docx") as watermarker:
watermark = ImageWatermark("logo.png")
watermark.sizing_type = SizingType.SCALE_TO_PARENT_DIMENSIONS
watermark.scale_factor = 0.5
watermark.opacity = 0.7
watermarker.add(watermark)
watermarker.save("watermarked.docx")
from groupdocs.watermark import Watermarker
from groupdocs.watermark.watermarks import TextWatermark, Font, TileOptions, TileType
with Watermarker("document.pdf") as watermarker:
watermark = TextWatermark("DRAFT", Font("Arial", 19))
tile = TileOptions()
tile.tile_type = TileType.STRAIGHT # repeat across the page
watermark.tile_options = tile
watermark.opacity = 0.3
watermarker.add(watermark)
watermarker.save("tiled.pdf")
from groupdocs.watermark import Watermarker
from groupdocs.watermark.search.search_criteria import TextSearchCriteria
with Watermarker("watermarked.pdf") as watermarker:
criteria = TextSearchCriteria("CONFIDENTIAL") # also: ImageSearchCriteria(...)
possible = watermarker.search(criteria)
print("found:", len(possible))
for wm in possible:
print(wm.text, wm.x, wm.y)
watermarker.remove(possible) # remove the whole collection
watermarker.save("clean.pdf")
from groupdocs.watermark import Watermarker
with Watermarker("document.pdf") as watermarker:
info = watermarker.get_document_info()
print("format:", info.file_type)
print("pages:", info.page_count)
from groupdocs.watermark import Watermarker
from groupdocs.watermark.options import PreviewOptions, PreviewFormats
def create_page_stream(page_number):
return open("page-%d.png" % page_number, "wb")
def release_page_stream(page_number, stream):
stream.close() # the object create_page_stream returned
with Watermarker("document.pdf") as watermarker:
options = PreviewOptions(create_page_stream, release_page_stream)
options.preview_format = PreviewFormats.PNG
options.page_numbers = [1, 2]
watermarker.generate_preview(options)
create_page_stream may also return an io.BytesIO; it is filled by the time release_page_stream gets it.
import io
from groupdocs.watermark import Watermarker
from groupdocs.watermark.watermarks import TextWatermark, Font
with open("document.pdf", "rb") as src:
with Watermarker(src) as watermarker:
watermarker.add(TextWatermark("CONFIDENTIAL", Font("Arial", 36)))
buffer = io.BytesIO()
watermarker.save(buffer) # BytesIO is updated after save
data = buffer.getvalue()
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{ "mcpServers": { "groupdocs-docs": { "url": "https://docs.groupdocs.com/mcp" } } }
https://docs.groupdocs.com/watermark/python-net/llms-full.txt.md to any docs URLThe API works without a license in evaluation mode. Every feature runs - adding several watermarks, search, and removal included - and there is no cap on the number of documents, but each saved document carries an evaluation mark:
To remove the mark, apply a license or request a temporary license:
from groupdocs.watermark 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"
| Issue | Platform | Fix |
|---|---|---|
| “Evaluation only” / “Created with evaluation version” line, or an “Evaluation Warning” sheet, in the output | All | No license is applied: set GROUPDOCS_LIC_PATH or call License().set_license(path) |
The type initializer for 'Gdip' threw an exception / DllNotFoundException: libgdiplus when adding a watermark | Linux/macOS | Install libgdiplus: apt-get install libgdiplus / brew install mono-libgdiplus. Only text watermarks on Word, Excel, PowerPoint, Visio, and image files, text watermarks on PDF that set sizing_type, and image watermarks, removal, and previews on PowerPoint need it; the rest of PDF works without it |
FontNotFoundException when adding a text watermark to a PDF | Linux | Install the font the watermark names - for Arial and the other Microsoft fonts: apt-get install ttf-mscorefonts-installer (Debian: enable contrib), then fc-cache -f. Liberation fonts are not substituted |
Not implemented. from generate_preview on a PowerPoint file | Linux/macOS | PowerPoint previews need a GDI+ feature libgdiplus lacks; generate them on Windows. Previews of the other formats work |
The process aborts on first use with Couldn't find a valid ICU package | Linux | Install ICU: apt-get install libicu-dev; do NOT set DOTNET_SYSTEM_GLOBALIZATION_INVARIANT |
is not a supported wheel on this platform, or No matching distribution found | Linux/macOS | The OS is older than the wheel needs (glibc 2.27, macOS 12), or pip is older than 20.3: python -m pip install --upgrade pip. On an Intel Mac, a Python built against an old SDK reports macOS 10.16 - use pip 24.1+ or SYSTEM_VERSION_COMPAT=0 pip install groupdocs-watermark-net |
apt-get install libicu-dev libfontconfig1 libgdiplus ttf-mscorefonts-installer (on Debian, enable the contrib component first). libgdiplus is needed for text watermarks on Word, Excel, PowerPoint, Visio, and image files, for text watermarks on PDF files that set sizing_type, and for image watermarks, removal, and previews on PowerPoint files; the core fonts for text watermarks on PDF files, which look their font up by name.brew install mono-libgdiplus for the same features.release_page_stream(page_number, stream) now gets the stream create_page_stream returned; 26.6 passed None. A one-argument release_page_stream(page_number) still works.io.BytesIO pages are filled (26.6 left them empty).WatermarkerSettings.logger takes a Python object with trace, warning, and error methods, or a function fn(level, message, exception).AttributeError with a suggestion (watermark.opactiy = 0.5 -> “Did you mean: ‘opacity’?”); 26.6 stored it on the Python object and changed nothing.manylinux_2_27, macosx_12_0), so installing needs pip 20.3 or newer.The release notes have the full list.
Also available for other platforms: .NET | Java | Node.js
Product Page | Docs | Demos | API Reference | Blog | Free Support | Temporary License
GroupDocs.Watermark GroupDocs.Total Python PyPI Document-Watermarking Text-Watermark Image-Watermark Watermark-Search Watermark-Removal Document-Protection
Self-contained Python wheel of GroupDocs.Watermark 26.10 for Windows (x64). Compatible with Python 3.5-3.14. No external dependencies required. Add, search and remove watermarks in documents.
Added: 15/10/2026
Downloads:
File Size: 131.14MB
Self-contained Python wheel of GroupDocs.Watermark 26.10 for Linux (x64). Compatible with Python 3.5-3.14. Requires ICU (libicu), libgdiplus, libfontconfig1, and fonts (e.g. ttf-mscorefonts-installer). Add, search and remove watermarks in documents.
Added: 15/10/2026
Downloads:
File Size: 130.52MB
Self-contained Python wheel of GroupDocs.Watermark 26.10 for macOS amd64 (Intel). Compatible with Python 3.5-3.14. Requires mono-libgdiplus (brew install mono-libgdiplus). Add, search and remove watermarks in documents.
Added: 15/10/2026
Downloads:
File Size: 132.5MB
Self-contained Python wheel of GroupDocs.Watermark 26.10 for macOS arm64 (Apple Silicon). Compatible with Python 3.5-3.14. Requires mono-libgdiplus (brew install mono-libgdiplus). Add, search and remove watermarks in documents.
Added: 15/10/2026
Downloads:
File Size: 130.39MB
Self-contained Python wheel of GroupDocs.Watermark 26.6 for Windows (x64). Compatible with Python 3.5-3.14. No external dependencies required. Add, search and remove watermarks in documents.
Added: 26/6/2026
Downloads:
File Size: 128.13MB
Self-contained Python wheel of GroupDocs.Watermark 26.6 for Linux (x64). Compatible with Python 3.5-3.14. Requires libgdiplus, libfontconfig1, and fonts (e.g. ttf-mscorefonts-installer). Add, search and remove watermarks in documents.
Added: 26/6/2026
Downloads:
File Size: 127.48MB
Self-contained Python wheel of GroupDocs.Watermark 26.6 for macOS arm64 (Apple Silicon). Compatible with Python 3.5-3.14. Requires mono-libgdiplus (brew install mono-libgdiplus). Add, search and remove watermarks in documents.
Added: 26/6/2026
Downloads:
File Size: 127.3MB
Self-contained Python wheel of GroupDocs.Watermark 26.6 for macOS amd64 (Intel). Compatible with Python 3.5-3.14. Requires mono-libgdiplus (brew install mono-libgdiplus). Add, search and remove watermarks in documents.
Added: 26/6/2026
Downloads:
File Size: 129.42MB
This wheel contains GroupDocs.Watermark version 25.12, compatible with Python 3 and optimized for Linux 64-bit systems
Added: 12/12/2025
Downloads:
File Size: 136.71MB
This contains the WHL package of GroupDocs.Watermark for Python via .NET
Added: 12/12/2025
Downloads:
File Size: 130.72MB
This whl contains GroupDocs.Watermark version 25.12, compatible with Python 3 and optimized for MacOS 64-bit systems.
Added: 12/12/2025
Downloads:
File Size: 133.61MB
This wheel contains GroupDocs.Watermark for Python via .NET version 25.12, built for Windows and targeting the AMD64 architecture.
Added: 12/12/2025
Downloads:
File Size: 127.3MB
This wheel contains GroupDocs.Watermark version 25.12, compatible with Python 3 and optimized for Windows 32-bit systems.
Added: 12/12/2025
Downloads:
File Size: 122.14MB
This wheel contains GroupDocs.Watermark version 25.3, compatible with Python 3 and optimized for Linux 64-bit systems
Added: 26/3/2025
Downloads:
File Size: 130.5MB
This whl contains GroupDocs.Watermark version 25.3, compatible with Python 3 and optimized for MacOS 64-bit systems.
Added: 26/3/2025
Downloads:
File Size: 130.82MB
This wheel contains GroupDocs.Watermark for Python via .NET version 25.3, built for Windows and targeting the AMD64 architecture.
Added: 26/3/2025
Downloads:
File Size: 124.06MB
This wheel contains GroupDocs.Watermark version 25.3, compatible with Python 3 and optimized for Windows 32-bit systems.
Added: 26/3/2025
Downloads:
File Size: 119.02MB
This wheel contains GroupDocs.Viewer for Python via .NET version 24.9.1, built for MacOS and targeting the ARM64 architecture.
Added: 16/9/2024
Downloads:
File Size: 157.97MB
This wheel contains GroupDocs.Watermark for Python via .NET version 24.9.1, built for Windows and targeting the AMD64 architecture.
Added: 16/9/2024
Downloads:
File Size: 159.09MB
This wheel contains GroupDocs.Watermark version 24.9.1, compatible with Python 3 and optimized for Windows 32-bit systems.
Added: 16/9/2024
Downloads:
File Size: 154.46MB
This wheel contains GroupDocs.Watermark for Python via .NET version 24.5, built for Windows and targeting the AMD64 architecture.
Added: 24/6/2024
Downloads:
File Size: 77.19MB
This wheel contains GroupDocs.Watermark version 24.5.0, compatible with Python 3 and optimized for Windows 32-bit systems.
Added: 24/6/2024
Downloads:
File Size: 72.66MB