We’re happy to announce the release of GroupDocs.Merger for .NET v26.10, available as of October 2026. This release introduces major enhancements for controlling external resource loading, resolves critical concurrency issues in EPUB and TeX processing, improves EPUB pagination, preserves PDF format and title in auto-tagged output, and fixes several .NET Framework–related failures. Overall, it includes 10 features, improvements, and bug fixes.
What’s new in this release
- [Feature] Skip loading external resources by default, with a whitelist of trusted locations and a per-resource handler
- [Bug] Fix NullReferenceException for EPUB documents whose table of contents file does not have the .ncx extension
- [Bug] Fix image joins failing to load System.ValueTuple in .NET Framework packages.config projects
- [Bug] Fix joins with SVG documents failing on .NET Framework 4.6.2 to 4.7.0 runtimes
- [Bug] Render fixed-layout EPUB pages one per book page instead of splitting each in two
- [Bug] Update System.Security.Cryptography.Pkcs to 8.0.2 and 9.0.21 (CVE-2026-84008, CVE-2026-70162)
- [Bug] Keep the original PDF format and title when saving with auto-tagging enabled
- [Bug] Fix an ArgumentException when TeX documents are loaded concurrently
- [Bug] Save LowCode output given as a bare file name to the current directory and reject joined documents of another format
- [Bug] Fix EPUB documents intermittently failing with NullReferenceException or IndexOutOfRangeException when processed concurrently
Public API changes
1. External resources — denied by default (new API, backward incompatible)
New public types in the GroupDocs.Merger.Domain.Options namespace:
| Type | Description |
|---|---|
| IResourceLoadingOptions | Defines SkipExternalResources, WhitelistedResources and ExternalResourceHandler. LoadOptions implements it. |
| IExternalResourceHandler | Its OnLoading method is called for each external resource before it is loaded and can allow, skip or replace it. |
| ExternalResourceLoadingArgs | The resource passed to OnLoading: Uri, Skipped (pre-set to the decision of the other two options) and Data (content to use instead of loading the resource). |
New properties of LoadOptions:
SkipExternalResources—trueby default in every constructor. Whiletrue, no external resource is loaded except those matchingWhitelistedResourcesor allowed by the handler.WhitelistedResources— absolute URI prefixes of resources that are loaded whileSkipExternalResourcesistrue, for examplehttps://cdn.example.com/assets/orfile:///C:/assets/. Empty by default.ExternalResourceHandler—nullby default.
Backward incompatible changes:
- External resources are no longer loaded by default. Remote resources (
http,https,ftpand other schemes), UNC paths, local files, including files in the document’s own folder, and relative references that point outside the document are skipped, and the operation continues. Earlier versions loaded them. Remote images and stylesheets of HTML, Word and presentation documents can therefore be missing from the output, and the page count of HTML and Word documents can change. Content the document carries —data:URIs,cid:references, MHTML parts and packaged media — still loads. To load external resources, whitelist their locations, or setSkipExternalResourcestofalsefor documents you trust. LoadOptionsis nowsealed. A class derived from it no longer compiles. UseLoadOptionsdirectly, or implementILoadOptions; a customILoadOptionsimplementation that does not also implementIResourceLoadingOptionsgets the default policy.- A
WhitelistedResourcesentry that is null, empty, not an absolute URI, carries a query or fragment, or contains%2F,%5Cor%2Emakes theMergerconstructor throwArgumentException(“Whitelisted resource ‘…’ must be an absolute URI without a query, fragment or encoded ‘/’, ‘\’ or ‘.’.”). - If the handler throws, the resource is skipped and the operation throws
GroupDocsMergerException(“The external resource handler threw an exception; the resource was skipped. See the inner exception.”) with the handler’s exception asInnerException. - EPUB documents, and SVG and SVGZ documents in some operations, now have their markup checked for external references. A document whose markup is not well-formed XML fails with
GroupDocsMergerException(“The document’s markup could not be read to check it for external resources, so it was not loaded. Set SkipExternalResources to false without an ExternalResourceHandler to load it without the check.”). - The
OleDiagramOptions,OleSpreadsheetOptionsandOleWordProcessingOptionsconstructors that take a file path and a page number render the embedded object’s image with external resources denied, whatever theLoadOptionsof the target document allow. To show them, pass your own image data to the constructor that takes it. - The products of the
GroupDocs.Merger.LowCodepackage always deny external resources.
The options are read when the Merger is created, and documents joined to it follow its options.
2. Auto-tagged PDF documents keep the format and title of the source
No API change. A PDF document saved with PdfSaveOptions.AccesibilitySettings.EnableAutoTagging set to true keeps the PDF format and the title of the source. Previously every auto-tagged document was marked as PDF/UA-1, and an untitled source got the title “Tagged PDF”. Auto-tagging adds a logical structure tree; it does not make a document PDF/UA compliant, and a source that is already marked as PDF/UA keeps its mark.
3. Fixed-layout EPUB documents — one page per book page
No API change. A fixed-layout EPUB document now has one page per book page. Previously each book page was rendered as two pages, so GetDocumentInfo reported twice the page count and page N did not match the book’s page N. Page numbers passed to page operations such as ExtractPages, RemovePages or Split now refer to the book’s pages.
4. GroupDocs.Merger.LowCode — output path and joined documents
JoinPdf,JoinDocx,JoinPptxandRemovePagesPdfresolve a relative output path against the current working directory. An output path given as a bare file name is now saved to the current directory; previously it was saved to Merger’s default output directory. A null or empty output path throwsArgumentNullException.JoinPdf,JoinDocxandJoinPptxthrowFileTypeNotSupportedExceptionwhen a joined document’s extension is not the product’s format, before any output is written, for example “Input format does not match the expected format ‘PDF’; the joined file ‘a.docx’ is ‘Microsoft Word Open XML Document (.docx)’.”. PreviouslyJoinPdfandJoinDocxproduced mixed output andJoinPptxfailed later with another message. A null or empty joined document path throwsArgumentNullException(“The document at index 0 is null or empty.”).- All seven products throw
FileTypeNotSupportedException(“Input format does not match the expected format ‘PDF’; the supplied file is ‘Unknown’.”) for a source path without an extension, instead ofArgumentException.
5. Dependencies
- The runtime packages depend on System.Security.Cryptography.Pkcs 8.0.2 (
GroupDocs.Merger.Net60,GroupDocs.Merger.Net80and their.Windowspackages) or 9.0.21 (GroupDocs.Merger.Net100andGroupDocs.Merger.Net100.Windows).GroupDocs.Merger.Net60,GroupDocs.Merger.Net60.WindowsandGroupDocs.Merger.LowCodealso depend on System.Formats.Asn1 8.0.2, andGroupDocs.Merger.LowCodeon System.Security.Cryptography.Pkcs 8.0.2.GroupDocs.Merger.Net462is unchanged. - In .NET Framework projects, the
GroupDocs.Mergerpackage no longer adds a binding redirect for System.ValueTuple toapp.configorweb.config(packages.config projects), and its .NET Framework build targets setDependsOnNETStandardtotrueunless the project sets it.
New features
- Control of external resources: Remote images, stylesheets, linked pictures and other files a document references are no longer loaded unless you allow them.
LoadOptionshas newSkipExternalResources,WhitelistedResourcesandExternalResourceHandlerproperties to allow trusted locations, allow everything for documents you trust, or decide, skip or supply each resource in your own code. - Concurrency fixes: EPUB documents no longer fail intermittently with
NullReferenceExceptionorIndexOutOfRangeException, and TeX documents withArgumentException, when they are processed from several threads. - EPUB documents: Fixed-layout EPUB documents now have one page per book page, so page N is the book’s page N. EPUB documents whose table of contents file has another extension than
.ncxno longer fail withNullReferenceException. - Auto-tagged PDF output: A PDF document saved with auto-tagging keeps the format and the title of the source. It is no longer marked as PDF/UA-1 unless the source was, and an untitled source no longer gets the title “Tagged PDF”.
- .NET Framework projects: Image joins in packages.config projects no longer fail to load System.ValueTuple, and joins with SVG documents no longer fail to load netstandard on .NET Framework 4.6.2 to 4.7.0 runtimes.
- Patched dependency: The packages depend on System.Security.Cryptography.Pkcs 8.0.2 (.NET 6.0 and .NET 8.0) or 9.0.21 (.NET 10.0), the versions that fix CVE-2026-84008 and CVE-2026-70162.
- LowCode products: An output path given as a bare file name is saved to the current directory, and
JoinPdf,JoinDocxandJoinPptxreject a joined document of another format before any output is written.
Code example
using System.Collections.Generic;
using GroupDocs.Merger;
using GroupDocs.Merger.Domain;
using GroupDocs.Merger.Domain.Options;
var loadOptions = new LoadOptions(FileType.HTML)
{
// Load resources from one trusted folder only; everything else stays denied
WhitelistedResources = new List<string> { "https://cdn.example.com/assets/" }
};
using (var merger = new Merger("page1.html", loadOptions))
{
merger.Join("page2.html");
merger.Save("merged.html");
}
using System;
using GroupDocs.Merger.Domain.Options;
public class TrustedPngHandler : IExternalResourceHandler
{
public void OnLoading(ExternalResourceLoadingArgs args)
{
Uri uri;
if (Uri.TryCreate(args.Uri, UriKind.Absolute, out uri)
&& uri.Scheme == Uri.UriSchemeHttps
&& uri.Host == "cdn.example.com"
&& uri.AbsolutePath.EndsWith(".png", StringComparison.OrdinalIgnoreCase))
{
args.Skipped = false; // allow; any other resource keeps the default decision
}
}
}
How to get the update
NuGet
Upgrade to the latest GroupDocs.Merger package via NuGet: GroupDocs.Merger 26.10.0
dotnet add package GroupDocs.Merger --version 26.10.0
Direct download
Download assemblies from the GroupDocs.Merger for .NET 26.10 page.