| categories |
|
||||
|---|---|---|---|---|---|
| date | 2026-03-06 | ||||
| description | Apprenez à préserver les métadonnées cibles lors de la comparaison de documents avec GroupDocs.Comparison pour .NET. Guide étape par étape avec des exemples C#. | ||||
| keywords | preserve target metadata, GroupDocs.Comparison metadata preservation, .NET document comparison, metadata preservation tutorial | ||||
| lastmod | 2026-03-06 | ||||
| linktitle | Metadata Preservation Tutorial | ||||
| tags |
|
||||
| title | Conserver les métadonnées de la cible avec GroupDocs.Comparison – Tutoriel .NET | ||||
| type | docs | ||||
| url | /fr/net/advanced-comparison/groupdocs-comparison-net-metadata-target/ | ||||
| weight | 1 |
Vous avez déjà comparé deux documents pour perdre des métadonnées importantes dans le processus ? Vous n'êtes pas seul. Lorsque vous devez preserve target metadata lors de la comparaison de documents dans une application .NET, la tâche peut sembler difficile—mais elle n'a pas à l'être.
GroupDocs.Comparison for .NET vous permet de choisir quelles métadonnées du document survivent au résultat de la comparaison. Que vous construisiez un système de gestion de documents, manipuliez des contrats juridiques ou gériez du contenu collaboratif, vous voudrez les métadonnées du bon document source à chaque fois.
Dans ce tutoriel, vous apprendrez comment preserve target metadata pendant la comparaison, éviter les pièges courants et mettre en œuvre la solution dans des scénarios réels.
- What does “preserve target metadata” mean? Cela conserve les métadonnées (author, creation date, custom properties, etc.) du document que vous désignez comme target lors de la génération du résultat de comparaison.
- Which GroupDocs.Comparison version is required? Version 25.4.0 ou ultérieure.
- Can I use this with .NET Core? Oui – .NET Core 2.0+ ou .NET Framework 4.6.1+.
- Is a license needed for production? Une licence commerciale est requise pour la production ; un essai gratuit suffit pour l'apprentissage.
- Will the feature work with PDF and DOCX? Oui – tous les principaux formats Office et PDF prennent en charge la préservation des métadonnées.
Avant de plonger dans le code, parlons de pourquoi la préservation des métadonnées cibles est importante. Les métadonnées d'un document ne sont pas simplement « nice to have »—elles sont souvent requises légalement ou critiques pour l'entreprise :
- Legal documents – besoin de conserver les marqueurs de privilège avocat‑client.
- Corporate files – doit conserver les balises de conformité et les chaînes d'approbation.
- Academic papers – l'attribution de l'auteur et l'historique des révisions sont essentiels.
- Technical documentation – le contrôle de version et le statut de révision sont importants.
Sans une gestion appropriée, vous pourriez accidentellement supprimer des informations qui ont mis des mois à être établies. C’est là que l’option preserve target metadata brille.
- GroupDocs.Comparison for .NET : Version 25.4.0 ou ultérieure (les versions antérieures offrent des options de métadonnées limitées).
- .NET Framework : 4.6.1 ou supérieur, ou .NET Core 2.0+.
- Visual Studio (ou tout IDE C# de votre choix).
- Connaissances de base en C# (rien de trop avancé, promis !).
- Deux documents d'exemple pour les tests (Word .docx fonctionne très bien).
Vous n'avez pas besoin d'être un expert GroupDocs, mais vous devez être à l'aise avec :
- les instructions C#
usinget la gestion des fichiers. - les concepts de base du traitement de documents.
- ce que sont réellement les métadonnées (author, title, custom properties, etc.).
Prêt ? Configurons cela.
L'installation de GroupDocs.Comparison est simple, mais il y a quelques pièges à surveiller.
NuGet Package Manager Console (easiest method):
Install-Package GroupDocs.Comparison -Version 25.4.0.NET CLI (if you prefer command line):
dotnet add package GroupDocs.Comparison --version 25.4.0Astuce : spécifiez toujours la version pour éviter des changements incompatibles inattendus dans votre projet.
Voici où de nombreux développeurs restent bloqués au départ. GroupDocs.Comparison n'est pas gratuit, mais vous avez des options :
- Free Trial – pleine fonctionnalité pendant 30 jours, parfait pour l'évaluation.
- Temporary License – période d'évaluation prolongée si vous avez besoin de plus de temps.
- Commercial License – pour une utilisation en production (différents niveaux de tarification disponibles).
Ne vous inquiétez pas de la licence pour l'instant si vous êtes en phase d'apprentissage—la version d'essai inclut toutes les fonctionnalités preserve target metadata.
Vérifions que tout fonctionne avec un test simple :
using System.IO;
using GroupDocs.Comparison;
string sourceFilePath = "source.docx";
string targetFilePath = "target.docx";
// Initialize the Comparer object.
using (Comparer comparer = new Comparer(sourceFilePath))
{
// Add the target document for comparison.
comparer.Add(targetFilePath);
}Si cela compile sans erreurs, vous êtes prêt. Sinon, revérifiez l'installation de votre package et les instructions using.
Passons maintenant à l'essentiel—conserver réellement les métadonnées lors de la comparaison de documents. C’est là que GroupDocs.Comparison brille vraiment.
Lors d’une comparaison typique :
- Source document fournit le contenu de base.
- Target document fournit les modifications à comparer.
- Le output document combine les deux, mais quelles métadonnées prévalent ?
Par défaut, GroupDocs.Comparison utilise les métadonnées du document source. Pour preserve target metadata, vous devez indiquer explicitement l'API.
Ceci établit le document de référence — celui avec lequel vous comparez :
using (Comparer comparer = new Comparer(sourceFilePath))
{
// All comparison operations happen within this scope
}Why use using statements? Elles libèrent automatiquement les ressources, évitant les fuites de mémoire lors du traitement de gros documents. Croyez‑moi, vous vous remercierez plus tard en manipulant des fichiers Word de 50 Mo.
Indiquez au comparateur quel document contient les changements que vous souhaitez analyser :
comparer.Add(targetFilePath);Common mistake : Confondre source et target. Pensez-y ainsi—source est votre « original », target est votre « version mise à jour ».
Spécifiez quelles métadonnées du document doivent être conservées dans le résultat :
comparer.Compare(outputFileName, new SaveOptions() { CloneMetadataType = MetadataType.Target });What’s happening? CloneMetadataType = MetadataType.Target indique à GroupDocs.Comparison : « Hey, je veux conserver les métadonnées du document target dans mon résultat final ».
Voici tout ensemble dans un programme exécutable :
using System;
using System.IO;
using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;
class Program
{
static void Main(string[] args)
{
try
{
string sourceFile = "original_document.docx";
string targetFile = "updated_document.docx";
string outputFile = "comparison_result.docx";
using (Comparer comparer = new Comparer(sourceFile))
{
comparer.Add(targetFile);
// Preserve target document metadata
comparer.Compare(outputFile, new SaveOptions()
{
CloneMetadataType = MetadataType.Target
});
Console.WriteLine($"Comparison completed! Check {outputFile}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error during comparison: {ex.Message}");
}
}
}File Path Issues – utilisez toujours des chemins complets ou assurez‑vous que vos fichiers se trouvent dans le répertoire de travail :
// Good
string sourceFile = Path.Combine(Directory.GetCurrentDirectory(), "docs", "source.docx");
// Risky (might work locally but fail in production)
string sourceFile = "source.docx";Memory Management – pour les gros documents, encapsulez toujours les objets Comparer dans des instructions using.
Version Compatibility – les différentes versions de GroupDocs.Comparison exposent différentes options de métadonnées—restez sur 25.4.0 ou plus récent pour de meilleurs résultats.
| Scénario | Préférer les métadonnées Target | Préférer les métadonnées Source |
|---|---|---|
| Updated author info needed | ✅ | ❌ |
| Original document has legal precedence | ❌ | ✅ |
| Custom properties added only in the newer file | ✅ | ❌ |
| You want to keep the “master” document’s history | ❌ | ✅ |
Vous pouvez comparer plusieurs cibles tout en conservant les métadonnées du premier target ajouté :
using (Comparer comparer = new Comparer(sourceFilePath))
{
comparer.Add(targetFilePath1);
comparer.Add(targetFilePath2);
comparer.Add(targetFilePath3);
// Metadata will come from the first target document
comparer.Compare(outputFileName, new SaveOptions()
{
CloneMetadataType = MetadataType.Target
});
}Les cabinets d'avocats doivent souvent comparer les versions de contrats tout en conservant des marqueurs de métadonnées spécifiques :
// Preserve client metadata from updated contract
using (Comparer comparer = new Comparer("original_contract.docx"))
{
comparer.Add("client_revised_contract.docx");
comparer.Compare("final_contract_comparison.docx", new SaveOptions()
{
CloneMetadataType = MetadataType.Target // Keep client's metadata
});
}Lorsque plusieurs chercheurs collaborent, vous souhaitez conserver les informations d'auteur les plus récentes :
// Keep metadata from the researcher's latest submission
using (Comparer comparer = new Comparer("draft_paper.docx"))
{
comparer.Add("researcher_updates.docx");
comparer.Compare("paper_comparison.docx", new SaveOptions()
{
CloneMetadataType = MetadataType.Target // Preserve researcher metadata
});
}Dans les industries réglementées, le maintien des métadonnées de conformité est crucial :
// Preserve compliance tags from updated policy document
using (Comparer comparer = new Comparer("old_policy.docx"))
{
comparer.Add("compliance_approved_policy.docx");
comparer.Compare("policy_comparison.docx", new SaveOptions()
{
CloneMetadataType = MetadataType.Target // Keep compliance metadata
});
}Le problème le plus fréquent. Déboguez avec des vérifications explicites :
string sourceFile = "source.docx";
// Always check if files exist before comparison
if (!File.Exists(sourceFile))
{
Console.WriteLine($"Source file not found: {Path.GetFullPath(sourceFile)}");
return;
}
// Same for target files
if (!File.Exists(targetFile))
{
Console.WriteLine($"Target file not found: {Path.GetFullPath(targetFile)}");
return;
}Pour les documents de plus de 10 Mo, envisagez ces optimisations :
// Use explicit disposal for large documents
using (var comparer = new Comparer(sourceFile))
{
comparer.Add(targetFile);
var saveOptions = new SaveOptions()
{
CloneMetadataType = MetadataType.Target
};
comparer.Compare(outputFile, saveOptions);
// Explicitly clean up
GC.Collect();
GC.WaitForPendingFinalizers();
}Lors du travail avec des fichiers protégés ou des partages réseau :
try
{
using (var comparer = new Comparer(sourceFile))
{
comparer.Add(targetFile);
comparer.Compare(outputFile, new SaveOptions()
{
CloneMetadataType = MetadataType.Target
});
}
}
catch (UnauthorizedAccessException ex)
{
Console.WriteLine("Access denied. Check file permissions.");
Console.WriteLine($"Details: {ex.Message}");
}
catch (IOException ex)
{
Console.WriteLine("File I/O error occurred.");
Console.WriteLine($"Details: {ex.Message}");
}GroupDocs.Comparison peut être gourmand en mémoire. Utilisez les instructions using pour garantir la libération :
// Good - automatic resource cleanup
using (var comparer = new Comparer(sourceFile))
{
// comparison logic here
}
// Bad - potential memory leaks
var comparer = new Comparer(sourceFile);
// ... comparison logic
// comparer.Dispose(); // Easy to forget!Process Documents in Batches – si vous comparez de nombreux fichiers, traitez‑les par petits lots pour maintenir une faible consommation de mémoire.
Pour les applications de bureau ou web, encapsulez la comparaison dans une méthode async :
public async Task<bool> CompareDocumentsAsync(string source, string target, string output)
{
return await Task.Run(() =>
{
try
{
using (var comparer = new Comparer(source))
{
comparer.Add(target);
comparer.Compare(output, new SaveOptions()
{
CloneMetadataType = MetadataType.Target
});
return true;
}
}
catch
{
return false;
}
});
}- Small (< 1 MB) – traitez directement.
- Medium (1‑10 MB) – affichez la progression pour garder l'interface réactive.
- Large (> 10 MB) – utilisez toujours le traitement async et envisagez un GC explicite comme montré ci‑dessus.
Voici un contrôleur prêt à l'emploi qui accepte deux fichiers téléchargés, exécute la comparaison et renvoie le résultat tout en preserving target metadata :
[ApiController]
[Route("api/[controller]")]
public class DocumentComparisonController : ControllerBase
{
[HttpPost("compare-with-target-metadata")]
public async Task<IActionResult> CompareWithTargetMetadata(
IFormFile sourceFile,
IFormFile targetFile)
{
var tempSource = Path.GetTempFileName();
var tempTarget = Path.GetTempFileName();
var outputPath = Path.GetTempFileName();
try
{
// Save uploaded files temporarily
await sourceFile.CopyToAsync(new FileStream(tempSource, FileMode.Create));
await targetFile.CopyToAsync(new FileStream(tempTarget, FileMode.Create));
// Perform comparison with target metadata preservation
using (var comparer = new Comparer(tempSource))
{
comparer.Add(tempTarget);
comparer.Compare(outputPath, new SaveOptions()
{
CloneMetadataType = MetadataType.Target
});
}
// Return comparison result
var resultBytes = await System.IO.File.ReadAllBytesAsync(outputPath);
return File(resultBytes, "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"comparison_result.docx");
}
finally
{
// Clean up temporary files
if (System.IO.File.Exists(tempSource)) System.IO.File.Delete(tempSource);
if (System.IO.File.Exists(tempTarget)) System.IO.File.Delete(tempTarget);
if (System.IO.File.Exists(outputPath)) System.IO.File.Delete(outputPath);
}
}
}Q : Puis‑je préserver les métadonnées de plusieurs documents target lors de la comparaison ?
A: Lorsque vous ajoutez plusieurs fichiers target, GroupDocs.Comparison utilise les métadonnées du premier document target ajouté. Ajoutez d'abord le document dont vous souhaitez conserver les métadonnées dans la chaîne.
Q : Que se passe‑t‑il si le document target ne possède pas certains champs de métadonnées ?
A: Seules les métadonnées présentes dans le target seront copiées dans le résultat. Les champs manquants sont simplement omis ; la comparaison réussit tout de même.
Q : Comment gérer les documents protégés par mot de passe ?
A: Utilisez un objet LoadOptions avec le mot de passe, puis passez‑le au constructeur Comparer :
var loadOptions = new LoadOptions() { Password = "your_password" };
using (var comparer = new Comparer(sourceFile, loadOptions))
{
// comparison logic here
}Q : Existe‑t‑il un moyen de ne préserver que certaines propriétés de métadonnées ?
A: L'API actuelle préserve toutes les métadonnées de la source choisie (Target ou Source). Pour un contrôle granulaire, vous devez extraire les propriétés après la comparaison et les réappliquer manuellement.
Q : Quels formats de documents prennent en charge la préservation des métadonnées ?
A: La plupart des formats professionnels courants—DOCX, PDF, PPTX, XLSX, et bien d’autres—prennent en charge la préservation des métadonnées. Consultez la documentation officielle pour la liste complète.
Q : Où puis‑je obtenir de l'aide en cas de problème ?
A: Consultez le GroupDocs Support Forum pour obtenir de l'aide de la communauté, ou contactez directement le support GroupDocs si vous disposez d'une licence commerciale.
- Documentation officielle : GroupDocs.Comparison for .NET Docs
- Référence API : Complete API Reference
- Télécharger la dernière version : GroupDocs Downloads
- Essai gratuit : Start Your Trial
- Options d'achat : Licensing and Pricing
Dernière mise à jour : 2026-03-06
Testé avec : GroupDocs.Comparison 25.4.0 for .NET
Auteur : GroupDocs