Skip to content

Latest commit

 

History

History
513 lines (404 loc) · 19.8 KB

File metadata and controls

513 lines (404 loc) · 19.8 KB
categories
Document Comparison
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
GroupDocs.Comparison
metadata-preservation
dotnet-tutorial
document-management
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

Conserver les métadonnées cibles avec GroupDocs.Comparison – Tutoriel .NET

Introduction

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.

Réponses rapides

  • 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.

Pourquoi la préservation des métadonnées est importante

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.

Prérequis

Bibliothèques requises et versions

  • 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+.

Configuration de l'environnement

  • 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).

Prérequis de connaissances

Vous n'avez pas besoin d'être un expert GroupDocs, mais vous devez être à l'aise avec :

  • les instructions C# using et 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.

Installation de GroupDocs.Comparison pour .NET

L'installation de GroupDocs.Comparison est simple, mais il y a quelques pièges à surveiller.

Options d'installation

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.0

Astuce : spécifiez toujours la version pour éviter des changements incompatibles inattendus dans votre projet.

Acquisition de licence

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érification de la configuration de base

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.

Comment conserver les métadonnées cibles

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.

Comprendre le flux des métadonnées

Lors d’une comparaison typique :

  1. Source document fournit le contenu de base.
  2. Target document fournit les modifications à comparer.
  3. 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.

Implémentation étape par étape

Étape 1 : Initialiser votre objet Comparer

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.

Étape 2 : Ajouter le document cible

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 ».

Étape 3 : Définir le type de métadonnées (la magie opère ici)

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 ».

Exemple complet fonctionnel

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}");
        }
    }
}

Pièges courants à éviter

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énarios avancés de métadonnées

Quand utiliser les métadonnées Target vs. Source

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

Gestion de plusieurs documents target

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 
    });
}

Applications pratiques et cas d'utilisation

Gestion de documents juridiques

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
    });
}

Collaboration académique et recherche

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
    });
}

Flux de travail de conformité d'entreprise

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
    });
}

Dépannage des problèmes courants

Erreurs « File Not Found »

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;
}

Problèmes de mémoire avec de gros documents

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();
}

Problèmes d'autorisation et d'accès

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}");
}

Considérations de performance et bonnes pratiques

Gestion de la mémoire

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.

Opérations async pour une meilleure réactivité

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;
        }
    });
}

Directives de taille de fichier

  • 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.

Intégration avec des systèmes plus grands

Intégration ASP.NET Core

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);
        }
    }
}

FAQ

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.

Ressources supplémentaires


Dernière mise à jour : 2026-03-06
Testé avec : GroupDocs.Comparison 25.4.0 for .NET
Auteur : GroupDocs