Release Notes


2026.9 - September, 2026

This is the biggest update in a few months (since July, 2026). We'll describe in more detail what's been fixed/improved and why you should update:

1. New support for EMF/WMF image formats in SautinSoft components.

An EMF image is a 32-bit vector graphic file format created by Microsoft, known as an Enhanced Metafile, that stores drawing commands to render images scaled to any size without losing quality.

Key Features of EMF Files:

  • Vector and Raster Data: Stores shapes, lines, text, and sometimes embedded bitmap data.
  • Device Independence: Renders correctly on any output device, like a monitor or printer, regardless of resolution.
  • Windows GDI Basis: Uses Windows Graphical Device Interface commands to recreate the image.
  • Upgrade from WMF: Serves as the modern 32-bit successor to the older 16-bit Windows Metafile (WMF) format.

An Enhanced Metafile (EMF) file structure consists of a sequential list of variable-length records sandwiched between a mandatory header at the beginning and an end-of-file record at the finish.

Core Components:

  • EMR_HEADER Record: Always starts the file. It holds metadata like file size, dimensions, version, the creator device's resolution, and a count of all drawing records.
  • EMF Records: The middle section contains zero or more drawing records. These are GDI (Graphics Device Interface) function calls like lines, curves, shapes, and text styling that command how to render the vector image. Extensions can also inject pixel formats or OpenGL commands.
  • EMF+ Records (Optional): Modern EMF files can embed GDI+ commands inside standard EMF records via an [MS-EMFPLUS] structure to allow advanced features like partial transparency.
  • EMR_EOF Record: Always marks the end of the file, optionally containing a palette buffer.

Common Uses:

  • Microsoft Office: Acts as a native format for storing clip art and simple vector graphics in Word, Excel, and PowerPoint.
  • Printing Spools: Used by Windows to cache print jobs as vector instructions before sending them to a printer.

SautinSoft supports the next WMF Versions and Variants:

  • Original WMF (16-bit): Introduced by Microsoft with Windows 3.0 in 1990. It stores drawing commands as a 16-bit list to reproduce vector and raster graphics across applications via the Windows Clipboard or MS Office clip art.
  • Placeable Metafile (APM): A non-standard header variant added to older WMF files to ensure correct scaling, positioning, and device-independence when moving 16-bit graphics between different applications.
  • Enhanced Metafile (EMF) (32-bit): Released later by Microsoft as a modern upgrade to WMF. It converts 16-bit arguments into 32-bit values, adds new function codes, improves device independence, and acts as a spool file format for printer drivers.
  • EMF+: An extension of EMF that records graphic commands using GDI+ drawing application programming interfaces (APIs), supporting more complex shapes and smoothing options.
  • WMZ / EMZ: Compressed versions of WMF and EMF files often used in web contexts or compressed archives.

2. SautinSoft and AI Coding. Skill for CLI coding agents (Copilot / Claude / Codex).

The SautinSoft agent skill allows command-line (CLI) coding agents to accurately write complex code for SautinSoft Software .NET libraries without generating boilerplate errors.

Supported AI Tools:

  • GitHub Copilot;
  • Claude Code;
  • OpenAI Codex.
Supported SautinSoft Libraries:

How It Works:

Skill for CLI coding agents (Copilot / Claude / Codex).
CLI coding agents such as GitHub Copilot CLI, Claude Code, and OpenAI Codex are capable of generating valid SautinSoft code when equipped with our sautinsoft-skill. Further information regarding the skills standard can be found on the Agent Skills website.

New to agent skills?
Refer to our blog article for insights, installation instructions, and a Docker image for rapid testing. If you have previously utilized agent skills, you will be acquainted with the following steps.

You can download the skill installation steps here: sautinsoft-skill.zip

Unzip and transfer the complete sautinsoft-skill/ folder to your designated agent skills installation path (refer to "Coding agents paths" below). Restart your coding agent and enter /skills list in interactive mode to confirm the skill's availability.

Upon installation, your coding agent will automatically employ sautinsoft-skill when producing SautinSoft code. You can also manually activate the skill using /sautinsoft-skill (for Copilot and Claude) or /skills sautinsoft-skill (for Codex).

Coding agents paths:

A. GitHub Copilot CLI
Personal skills installation path (create a "skills" folder if it does not exist)
Windows Explorer/cmd.exe: %USERPROFILE%\.copilot\skills\
PowerShell/Linux/macOS: ~/.copilot/skills/

B. Claude Code
Personal skills installation path
Windows Explorer/cmd.exe: %USERPROFILE%\.claude\skills\
PowerShell/Linux/macOS: ~/.claude/skills/

C. OpenAI Codex
Personal skills installation path
Windows Explorer/cmd.exe: %USERPROFILE%\.codex\skills\
PowerShell/Linux/macOS: ~/.codex/skills/


2026.8 - August, 2026
We'll describe in more detail what's been fixed/improved and why you should update:

1. The document page count engine has been improved.
A document format that doesn't have pages is called a flow-based or reflowable document. Its content flows continuously instead of being divided into fixed pages. Examples include:

  • Plain Text (.txt).
  • HTML (.html) (web pages).
  • Markdown (.md).
  • XML (.xml).
  • EPUB (reflowable e-books).
In contrast, page-based document formats include:
  • Microsoft Word (.docx, .rtf, .doc) (uses pages in Print Layout).
  • PDF (.pdf any versions).
  • OpenDocument Text (.odt).

If we’re talking about Document .Net is specifically about Microsoft Word Formats (DOC, DOCX, RTF), the document itself always supports pages in Print Layout. However, if you switch to Web Layout or Draft view, the document is displayed as a continuous flow without visible page boundaries, even though the document still has pages for printing. The same is in PDF .Net (PDF files).

Sautinsoft.Document determines the page count by laying out the document according to its current formatting and then counting the resulting pages. The total can change as you edit because Word continuously recalculates the layout.

The page count depends on factors such as:
  • Paper size (e.g., A4 vs. Letter).
  • Page margins.
  • Page orientation (Portrait or Landscape).
  • Font type and size.
  • Line and paragraph spacing.
  • Headers and footers.
  • Images, tables, and other objects.
  • Section breaks and page breaks.
  • Columns or other page layout settings.

For example, if you increase the font size from 11 pt to 12 pt, the same text may no longer fit on the same number of pages, increasing the page count.

How to see the page count

  • Status bar: The bottom-left corner of the Word window usually displays something like "Page 3 of 12".
  • Print Preview: This shows exactly how the document is paginated for printing.
  • Word Count dialog: Go to Review → Word Count to see the number of pages along with words, characters, paragraphs, and lines.

Why the page count may differ

The same document can have a different number of pages if:

  • It is opened on a system with different printer settings (Word uses the active printer's metrics to help determine layout).
  • The paper size changes (e.g., A4 vs. Letter).
  • Fonts are missing and substituted.
  • Margins or scaling settings are modified.
  • The document is viewed or printed with different layout options.

In short, Sautinsoft’ engine does not estimate pages based on the number of words. It calculates pages from the fully formatted document layout as it would appear when printed or viewed in Print Layout.

Our engine has been improved and now better handles various document formats (DOCX, PDF, DOC, RTF) that do not have a clear understanding of the number of pages. We also added support for the NСalc component inside components for fast and optimal determination of the number of pages.

2. To perform a full-text search in a PDF using C#.

A full-text search in a PDF means searching the actual textual content of a PDF document, rather than just its filename, metadata, or bookmarks. The goal is to find documents (or locations within documents) that contain specific words, phrases, or patterns.

There are several levels of complexity depending on the type of PDF and the search requirements.

  1. Searchable vs. Scanned PDFs
  2. The first thing to understand is that not all PDFs contain text.
    Searchable PDF
    These PDFs contain actual text objects.
    Examples:
    • Microsoft Word → Save as PDF
    • Excel → Export to PDF
    • PDF generated from HTML
    The text can be extracted directly.
    The quick brown fox jumps over the lazy dog.
    Searching simply means examining these text objects.
    Scanned PDF
    A scanned PDF is usually just an image.

    There is no searchable text.

    To perform full-text search, the document must first go through OCR (Optical Character Recognition) to convert the image into text.

  3. How PDF Text Is Stored
  4. Unlike a Word document, PDFs do not store text as paragraphs.
    Instead, they contain many drawing commands.
    Example (conceptually):
    Draw "H" at (100,700)
    Draw "e" at (108,700)
    Draw "l" at (115,700)
    Draw "l" at (118,700)
    Draw "o" at (121,700)

    A PDF library reconstructs these characters into words and sentences before searching.

  5. Basic Full-Text Search
  6. The simplest algorithm is:
    
                                bool found = text.Contains("invoice",
                                StringComparison.OrdinalIgnoreCase);
        

    The methods of SEARCHING in SautinSoft:

    • Phrase Search
    • Multiple Keywords
    • Regular Expression Search
    • Case Sensitivity
    • Whole Word Search
    • Fuzzy Search
    • Indexed Search
    • Highlighting Results

  7. Challenges in PDF Full-Text Search
  8. PDFs are designed for presentation, not logical document structure, so searching isn't always straightforward. Common challenges include:

  9. Typical Architecture
  10. A production-grade PDF search system often follows this pipeline:
  11. Full-Text Search in C#
  12. For .NET applications, the workflow is typically:
    • Open the PDF with a PDF/DOCX SautinSoft library.
    • Extract text from each page.
    • If the PDF is scanned, run OCR first.
    • Search the extracted text using string matching, regular expressions, or an index.
    • Optionally map matches back to page coordinates to highlight them.

    For a few PDFs, extracting text and searching in memory is usually sufficient. For large collections (thousands or millions of documents), building a full-text index with a search engine such as Sautinsoft.Document or SautinSoft.Pdf provides much faster query performance and supports advanced features like relevance ranking, phrase queries, and fuzzy matching.

    To perform full-text search in a PDF .Net using C#, you generally need to:
    1) Extract the text from the PDF.
    2) Search the extracted text for your keyword or phrase.
    Here are the most common approaches.
    Install:
    dotnet add package SautinSoft.Pdf
    Example:
    using System;
    using System.IO;
    using SautinSoft;
    using SautinSoft.Pdf;
    using SautinSoft.Pdf.Content;
    using System.Linq;
    
    namespace Sample
    {
        class Sample
        {
            /// 
            /// Find text in the PDF.
            /// 
            /// 
            /// Details: https://sautinsoft.com/products/pdf/help/net/developer-guide/find-text.php
            /// 
            static void Main(string[] args)
            {
                // Before starting this example, please get a free trial key:
                // https://sautinsoft.com/start-for-free/
    
                // Apply the key here:
                PdfDocument.SetLicense("Serial_key");
    
                string pdfFile = @"Example_01.pdf";
    
                var document = PdfDocument.Load(pdfFile);
                {
                    // 1.   Try to find text "Hello My Friend"
                    var text = document.Pages[0].Content.GetText().Find("Hello My Friend ");
    
                    Console.WriteLine("Found " + text.Count() + " elements of this symbol combination.");
    
                    foreach (var occur in text)
                    {
                        // 2.   Show the bounds of the string " Hello My Friend "
                        Console.WriteLine(occur.ToString());
                        Console.WriteLine(
                            $"Bottom    {occur.Bounds.Bottom}\n"+
                            $"Left      {occur.Bounds.Left}\n" +
                            $"Top       {occur.Bounds.Top}\n" +
                            $"Right     {occur.Bounds.Right}");
    
    
                        //      I create a new PdfQuad with Top and Hight of the found " Hello My Friend "
    
                        double dL = occur.Bounds.Left;
                        double dB = occur.Bounds.Bottom;
                        double dR = occur.Bounds.Right;
                        double dT = occur.Bounds.Top;
                        PdfQuad quad = new PdfQuad(dL, dB, dR, dT);
    
                        // 4.   Show the bounds for GetText
                        Console.WriteLine("\n\nGet text of amount on position:");
                        Console.WriteLine(
                            $"Bottom    {dB}\n" +
                            $"Left      {dL}\n" +
                            $"Top       {dT}\n" +
                            $"Right     {dR}");
    
                        // 5.   GetText with PdfTextOptions
                        var txtOnBounds = document.Pages[0].Content.GetText(new PdfTextOptions
                        {
                            Bounds = new PdfQuad(140, 640, 250, 660),
                            Order = PdfTextOrder.Reading
                        });
    
                        // 6.   Show found amount
                        Console.WriteLine($"\n\nFound Text:\n{txtOnBounds.ToString()}:");
    
                    }
    
                }
            }
        }
    }
        

Advantages

  • Free
  • .NET Support
  • Good text extraction
  • No Adobe dependency

3. Full support for embedded fonts at SautinSoft’ engines.

Embedded fonts in a PDF are font programs that are stored inside the PDF file itself. Instead of relying on the fonts installed on the viewer's computer, the PDF contains the necessary font data, ensuring the document looks the same everywhere.

Why embed fonts?
Embedding fonts provides several benefits:
  • Consistent appearance – Text is rendered exactly as the author intended.
  • Cross-platform compatibility – The PDF displays correctly on Windows, macOS, Linux, mobile devices, and browsers.
  • Reliable printing – Prevents font substitution that can change layout or line breaks.
  • Long-term archiving – Required by standards such as PDF/A.
Types of font embedding
  1. Full embedding
  2. The entire font program is included in the PDF.
    Advantages
    • All characters are available.
    • Text can often be edited without needing the original font.
    • Disadvantages
    • Larger PDF file size.
  3. Font subsetting
  4. Only the glyphs (characters) actually used in the document are embedded.
    For example:
    Original font:
    ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
    Text in PDF:
    HELLO
    Embedded subset:
    H E L O
    Advantages
    • Much smaller PDF.
    • Most PDFs use this approach.
    • Disadvantages
    • If you later edit the PDF and add characters that weren't embedded, the editing software may need access to the original font or substitute another font.

    What happens if fonts are not embedded?

    When a PDF references a font that isn't embedded:
    1) The PDF viewer looks for the font on the local system.
    2) If it cannot find it, it substitutes another font.
    3) The document's appearance may change.

    Possible effects include:
    • Different line wrapping
    • Changed page breaks
    • Misaligned tables
    • Incorrect spacing
    • Missing symbols or non-Latin characters.

    Which fonts cannot be embedded?

    Some commercial fonts have licensing restrictions.
    A font contains an embedding permission (often called the fsType flag in OpenType fonts) that specifies whether embedding is:
    • Installable
    • Editable
    • Preview & Print
    • Restricted (embedding prohibited).
    SautinSoft.PDF typically respects these permissions.
    SautinSoft has strong support for embedded fonts in PDF documents.
    Key capabilities include:
    • ✅ Reads embedded fonts from PDF files.
    • ✅ Preserves embedded fonts during PDF loading and saving.
    • ✅ Supports three modes through PdfLoadOptions.PreserveEmbeddedFonts:
    • Enabled – Always load embedded fonts.
      Disabled – Ignore embedded fonts and use system fonts.
      Auto – Use embedded fonts only when the font is not installed on the system (recommended).

    Example:

    var options = new PdfLoadOptions()
    {
        PreserveEmbeddedFonts = PropertyState.Enabled
    };
    
    DocumentCore dc = DocumentCore.Load("input.pdf", options);
        
    Support for embedded fonts in DOCX has also been added and improved.
    According to the release notes:
    • ✅ Reads DOCX files containing embedded fonts.
    • ✅ Preserves embedded fonts during document processing.
    • ✅ Continual improvements have been made to font subsetting, reducing document size while maintaining rendering quality.

    Font Handling

    When a required font is unavailable, SautinSoft provides:

    • Detection of missing fonts (FontSettingsMissingFonts)
    • Font substitution (FontSettingsAddFontSubstitutes)
    • Font selection events for custom replacement logic

    Unicode and Advanced Font Support

    Recent versions also include expanded support for:
    • TrueType fonts
    • Unicode fonts
    • OpenType ligatures
    • CJK (Chinese, Japanese, Korean)
    • WOFF and other font formats
    • Special glyphs, ornaments, and symbol fonts.

2026.7 - July, 2026
This is the biggest update in a few months (since Jan, 2026). We'll describe in more detail what's been fixed/improved and why you should update:

  • Component stability in multithreading mode.
Our libraries offer more functionality than just simple format conversion. We've eliminated instability and critical errors (crashes) that occurred during multi-threaded document conversion. Over the past few months, extensive work has been done to accelerate single-threaded and multi-threaded modes, and interaction between PDF, DOCX, HTML, RTF, Excel, and other applications has been improved. When implementing parallelism in C#, consider the specifics of your tasks:
  • Parallel.ForEachAsync (Recommended): for I/O-bound tasks (disk and network operations) without thread idleness.
  • Parallel.ForEach: exclusively for CPU-bound tasks (calculations, parsing in memory).

Currently, stable operation is guaranteed for the entire SautinSoft product line.

  • Full support for Chinese, Japanese and Korean languages.
To address difficulties in processing a number of Asian languages, a new text recognition algorithm was implemented. If the original font is unavailable in the operating system or cannot be parsed, the system performs an intelligent substitution. The alternative font is selected with complete precision based on the width, height, and column geometry (example: "YouYuan" -> "SimSun").
  • The Excel’ engine. Reader/Writer.
We’ve added the support of a lot of Unicode fonts in our engine.

2026.6 - June, 2026
We’re excited to officially launch the new version of our Excel .Net 2026.6
Let's see what's new:

  • We've improved the engine for processing layers containing text, images, shapes, and fills.
  • Minor bugs and inaccuracies have been fixed.

2026.5 - May, 2026
We’re excited to officially launch the new version of our Excel .Net 2026.5
Let's see what's new:

  • We implemented some important changes to the library.
  • Minor bugs and inaccuracies have been fixed.
  • We made a lot of changes in the library to reduce the number of memory allocations and the total amount of memory allocated.
  • Improved the parsing of Excel sheets with broken or incorrect structures.

From 5th, May:

  • We implemented some important changes to the library.
  • Minor bugs and inaccuracies have been fixed.
  • We fixed a bug with incorrect processing of some elements when parsing Excel documents.

2026.4 - April, 2026
We’re excited to officially launch the new version of our Excel .Net 2026.4
Let's see what's new:

  • An image-parser improves image optimization behavior by encoding images.
    With this modification, image recompression is now synchronized with the chosen encoding during the optimization process, resulting in more consistent outcomes when resizing images, restricting resolution, and adjusting quality settings.
  • A PDF-engine and a PDF-Writer: Following the release of version 2026.4.X, which emphasized enhancements to table calculations in HTML and PDF readers, improved support for ParagraphFormat, and superior rendering, frequent updates are made available.
    These updates include specialized versions such as PDF. Net, PDF Metamorphosis .Net, PDF Focus .Net, PDF Vision .Net, Document .Net, which are regularly updated to ensure compatibility with the .NET framework.
  • Minor bugs and inaccuracies have been fixed.

From 22nd, April:

  • Minor bugs and inaccuracies have been fixed.
  • Improved handling of table borders and margins in Excel: XLSX.

2026.3 - March, 2026
We’re excited to officially launch the new version of our Excel .Net 2026.3
Let's see what's new:

  • Fixed a bug with the absence of some specific characters in the resulting file.
  • Minor bugs and inaccuracies have been fixed.

2026.2 - February, 2026
We’re excited to officially launch the new version of our Excel .Net 2026.2
Let's see what's new:

  • Fixed a bug preventing the creation of empty XLSX files.
  • Improved component stability under .Net 10.
  • Minor bugs and inaccuracies have been fixed.

From 19th, February:

  • Fixed a bug with empty cells.

2026.1 - January, 2026
We’re excited to officially launch the new version of our Excel .Net 2026.1
Let's see what's new:

  • Fixed the minor issues, found and sent to us from our customers. Therefore the component became more error-free.
  • New functionality and properties have been added.
  • .NET 10.0 support: Starting from the version 2026.1.20 appeared the SautinSoft assemblies compiled for a unified platform .NET 10.0.

    .NET 10.0 support

  • Over the past year:
  • Improved Word document processing speed by 1.6 times.
  • Improved HTML conversion quality by adding new styles, tags, and metadata.
  • Optimized conversion time between formats by 1.3 times using new PDF/WORD/EXCEL engine models.
  • Added new fixes and security patches to meet global standards.
  • The overall quality of our components has improved and become more stable.

2025.11 - November, 2025

We’re excited to officially launch the new version of our .Net 2025.11!
Let's see what's new:

  • XLSX file processing speed has been doubled by optimizing structured data reading parameters.
  • Support for multiple formulas has been added.
  • Customer feedback has been addressed.
  • The quality of tabular data processing has been improved.
  • Cell formatting has been improved.

2025.10.17 - October 17th, 2025

We’re excited to officially launch the new version of our Excel .Net 2025.10!
Let's see what's new:

  • This release enhances formula processing, ensuring more accurate calculations and improved compatibility across complex spreadsheets.
  • Several minor issues have also been resolved to deliver a more stable and reliable conversion experience.

2025.8.12 - August 12nd, 2025

We’re excited to officially launch the new version of our Excel .Net 2025.8!
Let's see what's new:

  • Enhanced Excel file conversion for greater accuracy and formatting preservation.
  • Improved handling of merged cells and complex sheet structures, ensuring better layout fidelity in exported formats.
  • Fixed several minor issues to improve overall stability and performance.

2025.8.4 - August 4th, 2025

We are very excited to officially launch the new version of our Excel .Net 2025.8!
Let's see what's new:

  • This release introduces enhancements to the overall Excel file conversion process.
  • Output to formats like DOCX, RTF, and PDF is now more space-efficient, allowing more content to fit on each page.
  • We've also made improvements to XLSX export and addressed several minor bugs to increase reliability and consistency across various scenarios.

2025.6.5 - June 5th, 2025

We are very excited to announce the official release of our new Excel .Net 2025.6!
This update delivers enhancements focused on improving the fidelity of visual and structural elements during processing. Let's see what's new:

  • Refined the handling of conditional formatting to ensure more accurate color rendering across various cell conditions.
  • Improved image processing.
  • Shape rendering has also been improved, with better color precision and the introduction of support for grouped shapes, allowing for more faithful representation of complex layouts.
  • Several minor bugs have also been addressed to improve overall stability.

2025.4.23 - April 23rd, 2025

We’re excited to officially launch the new version of our Excel .Net 2025.4. Let's see what's new:

  • We’ve introduced subtle under-the-hood refinements designed to reinforce stability, boost responsiveness, and ensure even greater consistency when working with diverse Excel file structures. The component is now better equipped to handle complex scenarios while delivering a smoother overall experience.
  • We’ve updated the default content margins to ensure better alignment when exporting to different formats. In addition, support for a wider range of Excel formulas has been added, allowing for more accurate interpretation and conversion of complex calculations.

2025.2.06 - February 6th, 2025

We are happy to announce about the official release of Excel .Net 2025.2.6! Excel .Net is a standalone C# assembly which gives you full set of API to manipulate (read, write, edit, convert) with documents in XLSX, XLS, CSV formats. The component is completely written in 100% managed C# and help you to:

  • Create and edit Excel files (XLS, XLSX) on the fly or based on existing documents.
  • Formula support: Add, modify, and calculate complex formulas.
  • Formatting options: Customize styles, fonts, colors, borders, merge cells, and more.
  • Data handling: Work with large datasets, including adding, deleting, and updating rows and columns.
  • Multimedia integration: Insert images, charts, and graphs.
  • Compatibility: Read and write Excel files created with various versions of Microsoft Excel.
  • Cross-platform support: Compatible with Windows, macOS, and Linux.