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

KeyCategorySummary
VIEWERNET‑4658FeatureUnlink table of contents in Word documents
VIEWERNET‑3308FeatureMake ePub pages rendering as text, but not picture
VIEWERNET‑4712FeatureIntroduce new performance-oriented conversion mode for CAD format family
VIEWERNET‑4099FeatureSupport tiled rendering when converting CAD to PDF
VIEWERNET‑4747FeatureAdd JFIF (.jfif) file type as supported
VIEWERNET‑4625FeaturePreserve PDF copy protection when rendering to HTML
VIEWERNET‑3417FeatureAdd support for Adobe Illustrator Encapsulated PostScript (EPS) files
VIEWERNET‑4376FeatureRender presentations as pure HTML
VIEWERNET‑4874FeatureAdd support for repairing PDF documents
VIEWERNET‑4379FeatureAdd support for additional PDF optimizations
VIEWERNET‑4816FeatureAdd Zstandard Compressed File (.ZST) file-format support
VIEWERNET‑4927FeatureAdd ISO optical disk image file-format support
VIEWERNET‑4963FeatureImplement own high-quality conversion of XML to HTML
VIEWERNET‑4759EnhancementImprove Markdown files rendering quality
VIEWERNET‑3333EnhancementReduce output size when rendering large CAD drawings
VIEWERNET‑4761EnhancementEliminate or rename global styles from resultant HTML when viewing Spreadsheet files
VIEWERNET‑3695ImprovementImprove rendering for TSV/CSV files
VIEWERNET‑4968ImprovementUnknown in files list when rendering ZST from stream
VIEWERNET‑4974ImprovementImplement conversion of ARGB values in signed integer form to Argb32Color instance
VIEWERNET‑2641FixInvalid parameter exception when rendering PS file
VIEWERNET‑2791FixCache size is to big
VIEWERNET‑4244FixImage missing while rendering as HTML page
VIEWERNET‑2851Fix“Image export failed.” exception when rendering DWF file on Linux
VIEWERNET‑3805Fix“Bit depth of 8 bits are supported for RGBA images.” exception when rendering PNG file
VIEWERNET‑3437Fix“PdfFileInfo is not initialized. Use constructors with parameters or properties for initialization. (Reason: Incorrect file header)” exception when rendering IGS file
VIEWERNET‑3265Fix“The number greater than zero is expected. (Parameter ‘width’)” exception when rendering CDR, IFC files
VIEWERNET‑4628FixEXIF metadata is not taken into account when showing JPG
VIEWERNET‑3779FixFreeze on save when rendering ODS file
VIEWERNET‑3225FixFile is corrupted or damaged when rendering AI file
VIEWERNET‑4654FixText is not bold in the output HTML while font is installed or added using font repository
VIEWERNET‑2789FixIncorrect page size
VIEWERNET‑2758FixMissing drawing elements when converting DWG
VIEWERNET‑4746Fix"Incorrect message format specified in the options: Msg" error during call viewer.View for the MSG file.
VIEWERNET‑3449Fix“Failed to open presentation with error: Empty content in the AlternateContent” exception when rendering PPTX file
VIEWERNET‑3817FixMake readable exception for specific invalid TEX file
VIEWERNET‑2854FixCannot convert a DWG file when license is not applied
VIEWERNET‑4738FixNull reference exception when calling GetViewInfo for Excel file
VIEWERNET‑4434FixFont display issue
VIEWERNET‑3803FixOutput bitmap cannot be created when rendering MPP on Linux
VIEWERNET‑4794FixOut of memory exception on Linux
VIEWERNET‑4792FixImages are not in the right place
VIEWERNET‑4784FixWord With Table - Viewing problem
VIEWERNET‑2551Fix“Image export failed” exception when rendering PSD file
VIEWERNET‑4756FixInvestigate and fix issue with saving SVG to PNG
VIEWERNET‑4838FixWrong page size for vector images
VIEWERNET‑4882FixCan’t render barcode: not enough space
VIEWERNET‑4942FixException while viewing specific XLSM file
VIEWERNET‑4888FixXLS Spreadsheets are cutting off when converting them to PNG
VIEWERNET‑4745Fix"Value cannot be null. (Parameter 'bytes')" error during call viewer.View for the VCF file.
VIEWERNET‑4930FixCode execution does not compile the System.Text.Encoding.CodePages assembly
VIEWERNET‑4970FixRedistributable 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 modeOutput file size, MiBProcessing time, sec
Quality-oriented (default)46.87.87
Performance-oriented (new)5.044.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:

DWG quality vs. performance

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:

  1. Its fidelity is generally worse compared to the original SVG-based mode, especially on presentations with complex slides layout and sophisticated text formatting.
  2. For this moment rendering comments and notes are not supported, so the render_comments and render_notes properties of the HtmlViewOptions class are ignored.
  3. resolution property of the PresentationOptions class is also not supported for this moment, the images are exported to the output HTML document in their original resolution.
  4. render_to_single_page boolean property of the HtmlViewOptions class is not supported too, so every slide of the presentation will be saved to the distinct HTML document.
  5. render_responsive boolean property of HtmlViewOptions 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.