We’re happy to announce the release of GroupDocs.Viewer for Python 26.9, available as of September 2026. This release upgrades the underlying GroupDocs.Viewer engine from 26.4 to 26.8, adds support for rendering Microsoft Project files on Linux and macOS, introduces page numbering and resolution controls for Word documents, removes the libgdiplus dependency on non-Windows platforms, and restores compatibility with Python 3.5–3.7. The embedded .NET runtime is updated to 10.0.12, and the Python API now includes full docstrings with code examples.
What’s new in this release
- [Feature] Add
WordProcessingOptions.page_number_locationand theWordsPageNumberLocationenum to stamp page numbers on rendered Word documents (VIEWERPYTHON-153) - [Feature] Add
WordProcessingOptions.horizontal_resolution/vertical_resolutionto set the DPI of PNG and JPEG output for Word documents (VIEWERPYTHON-154) - [Feature] Add support for rendering Microsoft Project files (MPP, MPT, MPX) on Linux and macOS (VIEWERPYTHON-155)
- [Enhancement] Update GroupDocs.Viewer engine from 26.4 to 26.8 (VIEWERPYTHON-156)
- [Enhancement] Update the embedded .NET runtime from 10.0.0 to 10.0.12 (VIEWERPYTHON-157)
- [Enhancement] Remove the
libgdiplus/mono-libgdiplusrequirement on Linux and macOS (VIEWERPYTHON-158) - [Enhancement] Ship the same Python API on every platform — the Linux and macOS packages gain
ProjectManagementOptionsand the Project, Photoshop, Illustrator and OneNoteFileTypemembers (VIEWERPYTHON-159) - [Enhancement] Add docstrings with summaries, parameters and code examples to the Python API (VIEWERPYTHON-160)
- [Enhancement] Add a Developer Guide section to the API reference (VIEWERPYTHON-161)
- [Fix] Cannot use the package on Python 3.5 – 3.7 (VIEWERPYTHON-162)
- [Fix] pip installs the package on Linux and macOS versions that cannot run it (VIEWERPYTHON-163)
Public API changes
Nothing is removed or renamed.
New types
| Type | Module | Description |
|---|---|---|
WordsPageNumberLocation |
groupdocs.viewer.options |
Where to stamp page numbers on a rendered Word document: NOT_APPLY (default), TOP_LEFT, TOP_CENTER, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT |
New members on existing classes
| Class | Member | Description |
|---|---|---|
WordProcessingOptions |
page_number_location |
Page numbering to apply while rendering (WordsPageNumberLocation) |
WordProcessingOptions |
horizontal_resolution |
Horizontal DPI of PNG / JPEG output, 72 – 600 (default 96) |
WordProcessingOptions |
vertical_resolution |
Vertical DPI of PNG / JPEG output, 72 – 600 (default 96) |
New on Linux and macOS
ProjectManagementOptions, BaseViewOptions.project_management_options and FileType.MPP, MPT, MPX, PSD, PSB, AI, ONE were already available on Windows and are now in the Linux and macOS packages as well — see One Python API on every platform.
New features
Microsoft Project files on Linux and macOS
MPP, MPT and MPX files used to render on Windows only; on Linux and macOS they failed with Failed to detect file type. The 26.8 engine renders them on every platform, with the same ProjectManagementOptions as on Windows:
from groupdocs.viewer import Viewer
from groupdocs.viewer.options import HtmlViewOptions, TimeUnit
with Viewer("project.mpp") as viewer:
options = HtmlViewOptions.for_embedded_resources("page_{0}.html")
options.project_management_options.time_unit = TimeUnit.DAYS
viewer.view(options)
On Linux, install the Microsoft core fonts (ttf-mscorefonts-installer) first: without them Project rendering fails with Cannot find fallback font 'Generic Sans Serif', and metric-compatible substitutes such as Liberation do not satisfy that lookup.
Page numbers on rendered Word documents
WordProcessingOptions.page_number_location stamps page numbers on a Word document as it renders, even if the document has none. Choose one of six positions from the new WordsPageNumberLocation enum; the default, NOT_APPLY, leaves the document as it is.
from groupdocs.viewer import Viewer
from groupdocs.viewer.options import PdfViewOptions, WordsPageNumberLocation
with Viewer("document.docx") as viewer:
options = PdfViewOptions("output.pdf")
options.word_processing_options.page_number_location = WordsPageNumberLocation.BOTTOM_CENTER
viewer.view(options)
Resolution of PNG and JPEG output for Word documents
WordProcessingOptions.horizontal_resolution and vertical_resolution set the DPI of images rendered from Word documents. The default is 96 DPI; values outside 72 – 600 DPI are clamped to that range.
from groupdocs.viewer import Viewer
from groupdocs.viewer.options import PngViewOptions
with Viewer("document.docx") as viewer:
options = PngViewOptions("page_{0}.png")
options.word_processing_options.horizontal_resolution = 300
options.word_processing_options.vertical_resolution = 300
viewer.view(options)
No more libgdiplus
The Linux and macOS packages render through SkiaSharp and Aspose.Drawing, which ship inside the wheel. They never call libgdiplus: every documented example passes in a Linux container that has neither libgdiplus nor its graphics dependencies. Drop libgdiplus / mono-libgdiplus from your images and provisioning scripts.
One Python API on every platform
Earlier Linux and macOS packages exposed a smaller API than the Windows one. 26.9 ships the same API everywhere, so code written against the documentation imports on every platform. The Linux and macOS packages gain ProjectManagementOptions and the FileType.MPP, MPT and MPX members, which now work there too.
They also gain FileType.PSD, PSB, AI and ONE. Those formats remain Windows-only, and on Linux and macOS accessing one of these members raises GroupDocsViewerException: Member 'GroupDocs.Viewer.FileType.PSD' not found. To decide at runtime whether a format can render, check FileType.get_supported_file_types(), which lists only what the running engine renders:
from groupdocs.viewer import FileType
supported = {file_type.extension for file_type in FileType.get_supported_file_types()}
print(".psd" in supported) # True on Windows, False on Linux and macOS
print(".mpp" in supported) # True everywhere
Code example
To render a Microsoft Project file on Linux or macOS with daily time units:
from groupdocs.viewer import Viewer
from groupdocs.viewer.options import HtmlViewOptions, TimeUnit
with Viewer("project.mpp") as viewer:
options = HtmlViewOptions.for_embedded_resources("page_{0}.html")
options.project_management_options.time_unit = TimeUnit.DAYS
viewer.view(options)
To apply page numbering to a Word document and render to PDF:
from groupdocs.viewer import Viewer
from groupdocs.viewer.options import PdfViewOptions, WordsPageNumberLocation
with Viewer("document.docx") as viewer:
options = PdfViewOptions("output.pdf")
options.word_processing_options.page_number_location = WordsPageNumberLocation.BOTTOM_CENTER
viewer.view(options)
How to get the update
PyPI
Upgrade to the latest package via PyPI:
pip install groupdocs-viewer-net==26.9.0
Direct download
Download wheel files for all platforms from the GroupDocs.Viewer for Python via .NET 26.9 page.