GroupDocs.Viewer for Python via .NET 24.9 Release Notes
We are excited to announce the latest release, packed with significant improvements, new features, and essential fixes. This version brings better support for file formats such as ePub, JFIF, Adobe Illustrator (EPS), Zstandard Compressed files, ISO optical disk images and etc. We’ve added faster CAD file conversions, improved Markdown rendering, and new features like tiled rendering for CAD to PDF. Plus, we’ve fixed many issues with Word, PDF, Excel, and image rendering, making the overall experience smoother and more reliable.
Full list of changes in this release
Key | Category | Summary |
---|---|---|
VIEWERNET‑4658 | Feature | Unlink table of contents in Word documents |
VIEWERNET‑3308 | Feature | Make ePub pages rendering as text, but not picture |
VIEWERNET‑4712 | Feature | Introduce new performance-oriented conversion mode for CAD format family |
VIEWERNET‑4099 | Feature | Support tiled rendering when converting CAD to PDF |
VIEWERNET‑4747 | Feature | Add JFIF (.jfif) file type as supported |
VIEWERNET‑4625 | Feature | Preserve PDF copy protection when rendering to HTML |
VIEWERNET‑3417 | Feature | Add support for Adobe Illustrator Encapsulated PostScript (EPS) files |
VIEWERNET‑4376 | Feature | Render presentations as pure HTML |
VIEWERNET‑4874 | Feature | Add support for repairing PDF documents |
VIEWERNET‑4379 | Feature | Add support for additional PDF optimizations |
VIEWERNET‑4816 | Feature | Add Zstandard Compressed File (.ZST) file-format support |
VIEWERNET‑4927 | Feature | Add ISO optical disk image file-format support |
VIEWERNET‑4963 | Feature | Implement own high-quality conversion of XML to HTML |
VIEWERNET‑4759 | Enhancement | Improve Markdown files rendering quality |
VIEWERNET‑3333 | Enhancement | Reduce output size when rendering large CAD drawings |
VIEWERNET‑4761 | Enhancement | Eliminate or rename global styles from resultant HTML when viewing Spreadsheet files |
VIEWERNET‑3695 | Improvement | Improve rendering for TSV/CSV files |
VIEWERNET‑4968 | Improvement | Unknown in files list when rendering ZST from stream |
VIEWERNET‑4974 | Improvement | Implement conversion of ARGB values in signed integer form to Argb32Color instance |
VIEWERNET‑2641 | Fix | Invalid parameter exception when rendering PS file |
VIEWERNET‑2791 | Fix | Cache size is to big |
VIEWERNET‑4244 | Fix | Image missing while rendering as HTML page |
VIEWERNET‑2851 | Fix | “Image export failed.” exception when rendering DWF file on Linux |
VIEWERNET‑3805 | Fix | “Bit depth of 8 bits are supported for RGBA images.” exception when rendering PNG file |
VIEWERNET‑3437 | Fix | “PdfFileInfo is not initialized. Use constructors with parameters or properties for initialization. (Reason: Incorrect file header)” exception when rendering IGS file |
VIEWERNET‑3265 | Fix | “The number greater than zero is expected. (Parameter ‘width’)” exception when rendering CDR, IFC files |
VIEWERNET‑4628 | Fix | EXIF metadata is not taken into account when showing JPG |
VIEWERNET‑3779 | Fix | Freeze on save when rendering ODS file |
VIEWERNET‑3225 | Fix | File is corrupted or damaged when rendering AI file |
VIEWERNET‑4654 | Fix | Text is not bold in the output HTML while font is installed or added using font repository |
VIEWERNET‑2789 | Fix | Incorrect page size |
VIEWERNET‑2758 | Fix | Missing drawing elements when converting DWG |
VIEWERNET‑4746 | Fix | "Incorrect message format specified in the options: Msg" error during call viewer.View for the MSG file. |
VIEWERNET‑3449 | Fix | “Failed to open presentation with error: Empty content in the AlternateContent” exception when rendering PPTX file |
VIEWERNET‑3817 | Fix | Make readable exception for specific invalid TEX file |
VIEWERNET‑2854 | Fix | Cannot convert a DWG file when license is not applied |
VIEWERNET‑4738 | Fix | Null reference exception when calling GetViewInfo for Excel file |
VIEWERNET‑4434 | Fix | Font display issue |
VIEWERNET‑3803 | Fix | Output bitmap cannot be created when rendering MPP on Linux |
VIEWERNET‑4794 | Fix | Out of memory exception on Linux |
VIEWERNET‑4792 | Fix | Images are not in the right place |
VIEWERNET‑4784 | Fix | Word With Table - Viewing problem |
VIEWERNET‑2551 | Fix | “Image export failed” exception when rendering PSD file |
VIEWERNET‑4756 | Fix | Investigate and fix issue with saving SVG to PNG |
VIEWERNET‑4838 | Fix | Wrong page size for vector images |
VIEWERNET‑4882 | Fix | Can’t render barcode: not enough space |
VIEWERNET‑4942 | Fix | Exception while viewing specific XLSM file |
VIEWERNET‑4888 | Fix | XLS Spreadsheets are cutting off when converting them to PNG |
VIEWERNET‑4745 | Fix | "Value cannot be null. (Parameter 'bytes')" error during call viewer.View for the VCF file. |
VIEWERNET‑4930 | Fix | Code execution does not compile the System.Text.Encoding.CodePages assembly |
VIEWERNET‑4970 | Fix | Redistributable license shows as with “evaluation only” watermark |
Major changes
Introduced new performance-oriented conversion mode for CAD format family
By default the GroupDocs.Viewer converts and renders all documents within CAD format family with the max possible quality. In case when the input CAD file (DWG, for example) is very complex, it may lead to quite significant processing time. Also, the size of the generated output HTML or image (vector or raster) also may be too heavy.
Starting from the version 24.9 the GroupDocs.Viewer introduces a new public property within the CadOptions
class — the enable_performance_conversion_mode
boolean flag. By default it is set to False
- the GroupDocs.Viewer behaves as in previous versions, preserving the maximum quality. But when setting its value to True
, then the performance-oriented conversion mode is enabled, which leads to significantly lesser conversion time as well as lesser byte size of the output document.
Enabling this mode is pretty simple — just create an instance of the CadOptions
class by using any of the CadOptions factory methods, and then set the value for the enable_performance_conversion_mode
property. Example is below:
with gv.Viewer("input.dwg") as viewer:
viewOptions = gvo.HtmlViewOptions.for_embedded_resources("Output-Page#{0}.html")
viewOptions.cad_options = gvo.CadOptions.for_rendering_by_width(1000)
viewOptions.CadOptions.enable_performance_conversion_mode = True;
viewer.view(viewOptions)
If taking an ordinary DWG file as a sample, the comparison between “quality” and “performance” modes are the next:
Conversion mode | Output file size, MiB | Processing time, sec | ||
---|---|---|---|---|
Quality-oriented (default) | 46.8 | 7.87 | ||
Performance-oriented (new) | 5.04 | 4.47 |
Screenshot below illustrates the visual differences between these modes, default quality-oriented mode is on the left side, and the new performance-oriented mode is on the right side:
Support tiled rendering when converting CAD to PDF
This release adds support for rendering CAD drawings to a tiles when converting to PDF. Check Split a drawing into tiles documentation topic for more details and code snippet.
Reduce output size when rendering large CAD drawings
To reduce output image, HTML or PDF size when rendering complex CAD drawings you can set CadOptions.enable_performance_conversion_mode
to True
to reduce output quality and speed up rendering. See details at Choose rendering speed instead of quality documentation topic.
Added JFIF file type as supported
JPEG File Interchange Format (.jfif) is image that was developed for fast exchange between platforms. This format uses JPEG compression. Learn more about this file format here. See Supported file formats documentation topic for all supported formats.
Render Adobe Illustrator Encapsulated PostScript (EPS) files
File extension: .ai
.
File structure: Differs from standard AI files. EPS files typically have a %!PS-Adobe-3.0 EPSF
file header, which you can see by opening the file in a text editor.
Learn more: For more information on the differences between AI and EPS formats, see the Adobe article: Comparison of AI and EPS file formats.
Render presentations as pure HTML
Before this version 24.5, the GroupDocs.Viewer for .NET was able to render presentations to the HTML in only one mode, which is heavily based on SVG images. Actually, the whole slide is converted to a single vector image in SVG format, and the HTML here is served only as a wrapper around a SVG element. This mode has an undeniable advantage of 100% accurate reproduction of the original presentation. In other words, what you see in MS PowerPoint when opening a presentation, this is exactly what you see in the web-browser after opening the same presentation in the GroupDocs.Viewer. This is possible because GroupDocs.Viewer scans the original presentation document and reproduces it by drawing every tiny element, every pixel on a SVG canvas while preserving the position, shape and orientation.
But because of its SVG-based nature this mode also has the disadvantages — the SVG markup is too complex, full-text search may not work as expected, and, actually, this is not the “real” HTML- and CSS-markup. So if you want to implement something like modification or post-processing the document after obtaining it from GroupDocs.Viewer, you may encounter troubles, because standard tools like HTML parsers or CSS queries usually are not working with SVG markup.
That’s why we represent the new HTML conversion mode for the Presentations — pure HTML/CSS mode. In this mode no SVG images are generated at all, only pure HTML and CSS markup.
By default this mode is disabled, and the existing SVG-based mode is activated. For enabling the new pure HTML/CSS conversion mode, please set the boolean flag render_to_pure_html
to True
value in the presentation_options
property of the HtmlViewOptions
class.
Code example below shows converting the same presentation file to the pure HTML/CSS markup in two variations — with embedded and external resources:
with gv.Viewer("SamplePresentation.pptx") as viewer:
# preparing HTML options for embedded and external resources
embeddedOptions = gvo.HtmlViewOptions.for_embedded_resources("slide_{0}_embedded.html")
externalOptions = gvo.HtmlViewOptions.for_external_resources("slide_{0}.html", "slide_{0}_{1}", "slide_{0}_{1}")
# enabling the pure HTML/CSS mode for both options
embeddedOptions.presentation_options.render_to_pure_html = externalOptions.presentation_options.render_to_pure_html = True
viewer.view(embeddedOptions)
viewer.view(externalOptions)
Need to mention that this new pure HTML/CSS mode also has the next limitations and disadvantages:
- Its fidelity is generally worse compared to the original SVG-based mode, especially on presentations with complex slides layout and sophisticated text formatting.
- For this moment rendering comments and notes are not supported, so the
render_comments
andrender_notes
properties of theHtmlViewOptions
class are ignored. resolution
property of thePresentationOptions
class is also not supported for this moment, the images are exported to the output HTML document in their original resolution.render_to_single_page
boolean property of theHtmlViewOptions
class is not supported too, so every slide of the presentation will be saved to the distinct HTML document.render_responsive
boolean property ofHtmlViewOptions
class belongs to the existing SVG-based conversion mode, so its value is ignored while converting in pure HTML/CSS mode, — HTML- and CSS-markup are already 100% responsive.
We plan to add support for most of these missing features in the near future by constantly improving this new pure HTML/CSS converter, adding new features and fixing bugs.
Repairing corrupted PDF documents
By default GroupDocs.Viewer cannot process the PDF documents with corrupted structure or content — it throws an exception when trying to open such files. However, starting from this version 24.5 GroupDocs.Viewer can try to repair the structural corruptions in PDF documents. By default this feature is disabled. To enable it, need to use the newly added try_repair
boolean property of the LoadOptions
class by setting its value to True
.
When enabled, this feature addresses the following issues in a PDF document:
- Broken references within the document (incorrect object offsets in the Cross-reference list).
- Missing critical elements like root object, page object, or page content.
- Circular references (Form X-object referencing itself).
Here is a source code sample:
load_options = gvo.LoadOptions()
load_options.try_repair = True
with gv.Viewer("resume.pdf", load_options) as viewer:
options = gvo.PngViewOptions()
viewer.view(options)
Support Of Additional PDF Optimizations
In previous version the GroupDocs.Viewer for Python via .NET contains two new PDF optimization options, which are represented by the remove_unused_objects
and remove_unused_streams
boolean flag within the PdfOptimizationOptions
class.
We have prepared a special article, which describes these new features in details.
Support Of New Archive Formats
GroupDocs.Viewer for Python via .NET has started to support two new archive formats: ZSTANDARD and ISO (Optical Disk Image). For the Zstandard the GroupDocs.Viewer supports both “pure” archives (when only a single input file is packed to the *.zst
file) and TAR-wrapped archives (when multiple input files and/or folders are packed to the intermediate single TAR file, and then this TAR file itself is packed to the final *tar.zst
or *.tzst
file).
New XML converter
In the version 24.9 the GroupDocs.Viewer for Python via .NET contains a completely new XML processing module, which highly increases the quality, fidelity and robustness of the processing documents in the XML format. This new XML module is responsible for converting XML documents to all supported formats: HTML, PDF, PNG, and JPEG, and it provides formatting of XML structure, highlighting its different parts (like nodes, attributes, comments and so on), recognition of URIs and email addresses inside the XML markup, fixing invalid (broken) XML documents, pagination a single XMl document onto multiple pages, and so on. This new XML module is described in the new article in details.