Nous sommes heureux d’annoncer la sortie de GroupDocs.Merger for .NET v26.10, disponible depuis octobre 2026. Cette version introduit d’importantes améliorations pour le contrôle du chargement des ressources externes, résout des problèmes critiques de concurrence lors du traitement des documents EPUB et TeX, améliore la pagination des EPUB, préserve le format PDF et le titre dans la sortie auto‑étiquetée, et corrige plusieurs échecs liés à .NET Framework. Au total, elle comprend 10 fonctionnalités, améliorations et corrections de bugs.
Nouveautés de cette version
- [Feature] Passer le chargement des ressources externes par défaut, avec une liste blanche d’emplacements de confiance et un gestionnaire par ressource
- [Bug] Corriger NullReferenceException pour les documents EPUB dont le fichier de table des matières n’a pas l’extension .ncx
- [Bug] Corriger les jointures d’images qui échouaient à charger System.ValueTuple dans les projets .NET Framework packages.config
- [Bug] Corriger les jointures avec des documents SVG qui échouaient sur les runtimes .NET Framework 4.6.2 à 4.7.0
- [Bug] Rendre les pages EPUB à mise en page fixe une par page de livre au lieu de les diviser en deux
- [Bug] Mettre à jour System.Security.Cryptography.Pkcs vers 8.0.2 et 9.0.21 (CVE‑2026‑84008, CVE‑2026‑70162)
- [Bug] Conserver le format PDF original et le titre lors de l’enregistrement avec l’auto‑étiquetage activé
- [Bug] Corriger une ArgumentException lorsque des documents TeX sont chargés simultanément
- [Bug] Enregistrer la sortie LowCode donnée sous forme de nom de fichier seul dans le répertoire courant et rejeter les documents joints d’un autre format
- [Bug] Corriger les documents EPUB qui échouaient de façon intermittente avec NullReferenceException ou IndexOutOfRangeException lorsqu’ils étaient traités simultanément
Modifications de l’API publique
1. Ressources externes — refusées par défaut (nouvelle API, incompatibilité ascendante)
Nouveaux types publics dans l’espace de noms GroupDocs.Merger.Domain.Options :
| Type | Description |
|---|---|
| IResourceLoadingOptions | Définit SkipExternalResources, WhitelistedResources et ExternalResourceHandler. LoadOptions l’implémente. |
| IExternalResourceHandler | Sa méthode OnLoading est appelée pour chaque ressource externe avant son chargement et peut l’autoriser, la sauter ou la remplacer. |
| ExternalResourceLoadingArgs | La ressource transmise à OnLoading : Uri, Skipped (pré‑déterminé selon les deux autres options) et Data (contenu à utiliser à la place du chargement de la ressource). |
Nouvelles propriétés de LoadOptions :
SkipExternalResources—truepar défaut dans chaque constructeur. Tant quetrue, aucune ressource externe n’est chargée sauf celles correspondant àWhitelistedResourcesou autorisées par le gestionnaire.WhitelistedResources— préfixes d’URI absolus des ressources qui sont chargées lorsqueSkipExternalResourcesesttrue, par exemplehttps://cdn.example.com/assets/oufile:///C:/assets/. Vide par défaut.ExternalResourceHandler—nullpar défaut.
Modifications incompatibles :
- Les ressources externes ne sont plus chargées par défaut. Les ressources distantes (
http,https,ftpet autres schémas), les chemins UNC, les fichiers locaux, y compris ceux du dossier du document, et les références relatives pointant en dehors du document sont ignorés, et l’opération se poursuit. Les versions antérieures les chargeaient. Les images et feuilles de style distantes des documents HTML, Word et de présentation peuvent donc manquer dans la sortie, et le nombre de pages des documents HTML et Word peut changer. Le contenu intégré au document — URIdata:, référencescid:, parties MHTML et médias empaquetés — continue d’être chargé. Pour charger des ressources externes, ajoutez leurs emplacements à la liste blanche ou définissezSkipExternalResourcessurfalsepour les documents de confiance. LoadOptionsest maintenantsealed. Une classe dérivée ne compile plus. Utilisez directementLoadOptions, ou implémentezILoadOptions; une implémentation personnalisée deILoadOptionsqui n’implémente pas égalementIResourceLoadingOptionsobtient la politique par défaut.- Une entrée
WhitelistedResourcesqui est nulle, vide, qui n’est pas une URI absolue, qui comporte une requête ou un fragment, ou qui contient%2F,%5Cou%2Eprovoque le lancement d’uneArgumentExceptionpar le constructeurMerger(« Whitelisted resource ‘…’ must be an absolute URI without a query, fragment or encoded ‘/’, ‘\’ or ‘.’. »). - Si le gestionnaire lève une exception, la ressource est ignorée et l’opération lève
GroupDocsMergerException(« The external resource handler threw an exception; the resource was skipped. See the inner exception. ») avec l’exception du gestionnaire commeInnerException. - Les documents EPUB, ainsi que les documents SVG et SVGZ dans certaines opérations, font désormais l’objet d’une vérification de leur balisage pour des références externes. Un document dont le balisage n’est pas du XML bien formé échoue avec
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. `). - Les constructeurs
OleDiagramOptions,OleSpreadsheetOptionsetOleWordProcessingOptionsqui prennent un chemin de fichier et un numéro de page rendent l’image de l’objet incorporé avec les ressources externes refusées, quel que soit leLoadOptionsdu document cible. Pour les afficher, transmettez vos propres données d’image au constructeur qui les accepte. - Les produits du package
GroupDocs.Merger.LowCoderefusent toujours les ressources externes.
Les options sont lues lors de la création du Merger, et les documents qui y sont joints respectent ces options.
2. Les documents PDF auto‑étiquetés conservent le format et le titre de la source
Aucun changement d’API. Un document PDF enregistré avec PdfSaveOptions.AccesibilitySettings.EnableAutoTagging à true conserve le format PDF et le titre de la source. Auparavant chaque document auto‑étiqueté était marqué comme PDF/UA‑1, et une source sans titre recevait le titre « Tagged PDF ». L’auto‑étiquetage ajoute un arbre de structure logique ; il ne rend pas le document conforme PDF/UA, et une source déjà marquée PDF/UA conserve son marquage.
3. Documents EPUB à mise en page fixe — une page par page de livre
Aucun changement d’API. Un document EPUB à mise en page fixe possède désormais une page par page de livre. Auparavant chaque page de livre était rendue en deux pages, de sorte que GetDocumentInfo indiquait deux fois le nombre de pages et que la page N ne correspondait pas à la page N du livre. Les numéros de page transmis aux opérations de page telles que ExtractPages, RemovePages ou Split font désormais référence aux pages du livre.
4. GroupDocs.Merger.LowCode — chemin de sortie et documents joints
JoinPdf,JoinDocx,JoinPptxetRemovePagesPdf résolvent un chemin de sortie relatif par rapport au répertoire de travail actuel. Un chemin de sortie fourni sous forme de nom de fichier seul est maintenant enregistré dans le répertoire courant ; auparavant il était enregistré dans le répertoire de sortie par défaut du Merger. Un chemin de sortie nul ou vide lèveArgumentNullException`.JoinPdf,JoinDocxetJoinPptx lèventFileTypeNotSupportedExceptionlorsqu’une extension de document joint ne correspond pas au format du produit, avant toute écriture de sortie, par exemple « Input format does not match the expected format ‘PDF’; the joined file ‘a.docx’ is ‘Microsoft Word Open XML Document (.docx)’. ». AuparavantJoinPdfetJoinDocxproduisaient une sortie mixte etJoinPptxéchouait plus tard avec un autre message. Un chemin de document joint nul ou vide lèveArgumentNullException` (« The document at index 0 is null or empty. »).- Les sept produits lèvent
FileTypeNotSupportedException(« Input format does not match the expected format ‘PDF’; the supplied file is ‘Unknown’. ») lorsqu’un chemin source ne possède pas d’extension, au lieu deArgumentException.
5. Dépendances
- Les packages d’exécution dépendent de System.Security.Cryptography.Pkcs 8.0.2 (
GroupDocs.Merger.Net60,GroupDocs.Merger.Net80et leurs packages.Windows) ou 9.0.21 (GroupDocs.Merger.Net100etGroupDocs.Merger.Net100.Windows).GroupDocs.Merger.Net60,GroupDocs.Merger.Net60.WindowsetGroupDocs.Merger.LowCodedépendent également de System.Formats.Asn1 8.0.2, etGroupDocs.Merger.LowCodede System.Security.Cryptography.Pkcs 8.0.2.GroupDocs.Merger.Net462reste inchangé. - Dans les projets .NET Framework, le package
GroupDocs.Mergern’ajoute plus de redirection de liaison pour System.ValueTuple dansapp.configouweb.config(projets packages.config), et ses builds .NET Framework définissentDependsOnNETStandardàtruesauf si le projet le surcharge.
Nouvelles fonctionnalités
- Contrôle des ressources externes : les images distantes, feuilles de style, images liées et autres fichiers référencés par un document ne sont plus chargés à moins que vous ne les autorisiez.
LoadOptionspossède les nouvelles propriétésSkipExternalResources,WhitelistedResourcesetExternalResourceHandlerpour autoriser des emplacements de confiance, autoriser tout pour les documents de confiance, ou décider, sauter ou fournir chaque ressource dans votre propre code. - Corrections de concurrence : les documents EPUB ne tombent plus de façon intermittente avec
NullReferenceExceptionouIndexOutOfRangeException, et les documents TeX ne génèrent plusArgumentExceptionlorsqu’ils sont traités depuis plusieurs threads. - Documents EPUB : les EPUB à mise en page fixe possèdent désormais une page par page de livre, de sorte que la page N correspond à la page N du livre. Les EPUB dont le fichier de table des matières a une extension autre que
.ncxne génèrent plusNullReferenceException. - Sortie PDF auto‑étiquetée : un document PDF enregistré avec l’auto‑étiquetage conserve le format et le titre de la source. Il n’est plus marqué PDF/UA‑1 sauf si la source l’était, et une source sans titre ne reçoit plus le titre « Tagged PDF ».
- Projets .NET Framework : les jointures d’images dans les projets packages.config ne échouent plus à charger System.ValueTuple, et les jointures avec des documents SVG ne tombent plus sur le chargement de netstandard sur les runtimes .NET Framework 4.6.2 à 4.7.0.
- Dépendance corrigée : les packages dépendent de System.Security.Cryptography.Pkcs 8.0.2 (.NET 6.0 et .NET 8.0) ou 9.0.21 (.NET 10.0), les versions qui corrigent CVE‑2026‑84008 et CVE‑2026‑70162.
- Produits LowCode : un chemin de sortie fourni sous forme de nom de fichier seul est enregistré dans le répertoire courant, et
JoinPdf,JoinDocxetJoinPptxrejettent un document joint d’un autre format avant toute écriture de sortie.
Exemple de code
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
}
}
}
Comment obtenir la mise à jour
NuGet
Mettez à jour vers le dernier package GroupDocs.Merger via NuGet : GroupDocs.Merger 26.10.0
dotnet add package GroupDocs.Merger --version 26.10.0
Téléchargement direct
Téléchargez les assemblages depuis la page GroupDocs.Merger for .NET 26.10 .