Skip to content

Latest commit

 

History

History
529 lines (403 loc) · 19 KB

File metadata and controls

529 lines (403 loc) · 19 KB
categories
Document Comparison
date 2026-03-06
description Scopri come conservare i metadati di destinazione durante il confronto dei documenti utilizzando GroupDocs.Comparison per .NET. Guida passo passo con esempi in 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 Preservare i metadati di destinazione con GroupDocs.Comparison – Tutorial .NET
type docs
url /it/net/advanced-comparison/groupdocs-comparison-net-metadata-target/
weight 1

Conserva i Metadati di Destinazione con GroupDocs.Comparison – Tutorial .NET

Introduzione

Ti è mai capitato di confrontare due documenti e di perdere metadati importanti nel processo? Non sei solo. Quando devi preservare i metadati di destinazione durante il confronto di documenti in un'applicazione .NET, il compito può sembrare difficile—ma non deve esserlo.

GroupDocs.Comparison per .NET ti consente di decidere quali metadati del documento sopravvivono al risultato del confronto. Che tu stia costruendo un sistema di gestione documenti, gestendo contratti legali o gestendo contenuti collaborativi, vorrai i metadati del documento sorgente corretto ogni volta.

In questo tutorial imparerai come preservare i metadati di destinazione durante il confronto, evitare le insidie comuni e implementare la soluzione in scenari reali.

Risposte Rapide

  • Cosa significa “preservare i metadati di destinazione”? Mantiene i metadati (autore, data di creazione, proprietà personalizzate, ecc.) dal documento che designi come destinazione quando generi il risultato del confronto.
  • Quale versione di GroupDocs.Comparison è richiesta? Versione 25.4.0 o successiva.
  • Posso usarlo con .NET Core? Sì – .NET Core 2.0+ o .NET Framework 4.6.1+.
  • È necessaria una licenza per la produzione? È richiesta una licenza commerciale per la produzione; una prova gratuita è sufficiente per l'apprendimento.
  • La funzionalità funziona con PDF e DOCX? Sì – tutti i principali formati Office e PDF supportano la conservazione dei metadati.

Perché la Conservazione dei Metadati è Importante

Prima di passare al codice, parliamo del perché preservare i metadati di destinazione è importante. I metadati dei documenti non sono solo “belli da avere”—spesso sono richiesti legalmente o sono critici per il business:

  • Documenti legali – è necessario mantenere i marcatori di privilegio avvocato‑cliente.
  • File aziendali – devono conservare i tag di conformità e le catene di approvazione.
  • Articoli accademici – l'attribuzione dell'autore e la cronologia delle revisioni sono essenziali.
  • Documentazione tecnica – il controllo di versione e lo stato di revisione sono importanti.

Senza una gestione adeguata, potresti accidentalmente rimuovere informazioni che hanno richiesto mesi per essere stabilite. È qui che l'opzione preservare i metadati di destinazione brilla.

Prerequisiti

Librerie Richieste e Versioni

  • GroupDocs.Comparison per .NET: Versione 25.4.0 o successiva (le versioni precedenti hanno opzioni di metadati limitate).
  • .NET Framework: 4.6.1 o superiore, o .NET Core 2.0+.

Configurazione dell'Ambiente

  • Visual Studio (o qualsiasi IDE C# tu preferisca).
  • Conoscenza di base di C# (niente di troppo avanzato, promesso!).
  • Due documenti di esempio per il test (Word .docx funziona benissimo).

Prerequisiti di Conoscenza

Non è necessario essere esperti di GroupDocs, ma dovresti sentirti a tuo agio con:

  • le istruzioni using di C# e la gestione dei file.
  • i concetti di base dell'elaborazione dei documenti.
  • cosa sono effettivamente i metadati (autore, titolo, proprietà personalizzate, ecc.).

Pronto? Configuriamolo.

Configurazione di GroupDocs.Comparison per .NET

Installare GroupDocs.Comparison è semplice, ma ci sono un paio di trappole da tenere in considerazione.

Opzioni di Installazione

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

Suggerimento professionale: Specifica sempre la versione per evitare cambiamenti inattesi che potrebbero rompere il tuo progetto.

Acquisizione della Licenza

Qui è dove molti sviluppatori si bloccano inizialmente. GroupDocs.Comparison non è gratuito, ma hai delle opzioni:

  • Prova Gratuita – funzionalità complete per 30 giorni, perfetta per la valutazione.
  • Licenza Temporanea – periodo di valutazione esteso se hai bisogno di più tempo.
  • Licenza Commerciale – per l'uso in produzione (disponibili vari livelli di prezzo).

Non preoccuparti della licenza per ora se stai solo imparando—la versione di prova include tutte le funzionalità di preservare i metadati di destinazione.

Verifica della Configurazione di Base

Assicuriamoci che tutto funzioni con un semplice test:

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

Se questo compila senza errori, sei pronto. In caso contrario, ricontrolla l'installazione del pacchetto e le istruzioni using.

Come Conservare i Metadati di Destinazione

Ora il punto principale—preservare effettivamente i metadati durante il confronto dei documenti. È qui che GroupDocs.Comparison brilla davvero.

Comprendere il Flusso dei Metadati

Durante un tipico confronto:

  1. Documento sorgente fornisce il contenuto di base.
  2. Documento di destinazione fornisce le modifiche da confrontare.
  3. Il documento di output combina entrambi, ma a chi appartengono i metadati?

Per impostazione predefinita, GroupDocs.Comparison utilizza i metadati del documento sorgente. Per preservare i metadati di destinazione, devi indicarlo esplicitamente all'API.

Implementazione Passo‑Passo

Passo 1: Inizializza l'Oggetto Comparer

Questo stabilisce il documento “di base”—quello con cui confronti:

using (Comparer comparer = new Comparer(sourceFilePath))
{
    // All comparison operations happen within this scope
}

Perché usare le istruzioni using? Dispensano automaticamente le risorse, prevenendo perdite di memoria quando si elaborano documenti di grandi dimensioni. Fidati, ti ringrazierai più tardi quando gestirai file Word da 50 MB.

Passo 2: Aggiungi il Documento di Destinazione

Indica al comparer quale documento contiene le modifiche che vuoi analizzare:

comparer.Add(targetFilePath);

Errore comune: Confondere sorgente e destinazione. Pensalo così—la sorgente è il tuo “originale”, la destinazione è la tua “versione aggiornata”.

Passo 3: Imposta il Tipo di Metadati (Qui Avviene la Magia)

Specifica quali metadati del documento devono essere mantenuti nell'output:

comparer.Compare(outputFileName, new SaveOptions() { CloneMetadataType = MetadataType.Target });

Cosa sta succedendo? CloneMetadataType = MetadataType.Target dice a GroupDocs.Comparison: “Ehi, voglio mantenere i metadati del documento di destinazione nel risultato finale.”

Esempio Completo Funzionante

Ecco tutto insieme in un programma eseguibile:

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

Errori Comuni da Evitare

Problemi di Percorso File – usa sempre percorsi completi o assicurati che i file siano nella directory di lavoro:

// Good
string sourceFile = Path.Combine(Directory.GetCurrentDirectory(), "docs", "source.docx");

// Risky (might work locally but fail in production)
string sourceFile = "source.docx";

Gestione della Memoria – per documenti di grandi dimensioni, avvolgi sempre gli oggetti Comparer in istruzioni using.

Compatibilità di Versione – diverse versioni di GroupDocs.Comparison espongono opzioni di metadati differenti—rimani su 25.4.0 o versioni successive per i migliori risultati.

Scenari Avanzati di Metadati

Quando Usare Metadati di Destinazione vs. Sorgente

Scenario Preferisci Metadati Destinazione Preferisci Metadati Sorgente
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

Gestione di Più Documenti di Destinazione

Puoi confrontare più destinazioni mantenendo i metadati dalla prima destinazione aggiunta:

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

Applicazioni Pratiche e Casi d'Uso

Gestione Documenti Legali

Gli studi legali spesso devono confrontare versioni di contratti mantenendo marcatori di metadati specifici:

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

Collaborazione Accademica e di Ricerca

Quando più ricercatori collaborano, vuoi preservare le informazioni sull'autore più recenti:

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

Flussi di Lavoro per la Conformità Aziendale

Nelle industrie regolamentate, mantenere i metadati di conformità è critico:

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

Risoluzione dei Problemi Comuni

Errori “File Non Trovato”

Il problema più comune. Debug con controlli espliciti:

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

Problemi di Memoria con Documenti Grandi

Per documenti superiori a 10 MB, considera queste ottimizzazioni:

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

Problemi di Permessi e Accesso

Quando lavori con file protetti o condivisioni di rete:

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

Considerazioni sulle Prestazioni e Buone Pratiche

Gestione della Memoria

GroupDocs.Comparison può richiedere molta memoria. Usa le istruzioni using per garantire lo smaltimento:

// 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!

Elabora i Documenti in Batch – se confronti molti file, gestiscili in gruppi più piccoli per mantenere basso l'uso della memoria.

Operazioni Async per Maggiore Reattività

Per app desktop o web, avvolgi il confronto in un metodo 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;
        }
    });
}

Linee Guida sulle Dimensioni dei File

  • Piccoli (< 1 MB) – processa direttamente.
  • Medio (1‑10 MB) – mostra il progresso per mantenere l'interfaccia reattiva.
  • Grandi (> 10 MB) – usa sempre l'elaborazione async e considera un GC esplicito come mostrato sopra.

Integrazione con Sistemi più Grandi

Integrazione ASP.NET Core

Di seguito un controller pronto all'uso che accetta due file caricati, esegue il confronto e restituisce il risultato mentre preserva i metadati di destinazione:

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

Domande Frequenti

Q: Posso preservare i metadati da più documenti di destinazione quando confronto?
A: Quando aggiungi diversi file di destinazione, GroupDocs.Comparison utilizza i metadati dal primo documento di destinazione aggiunto. Aggiungi per primo nella catena il documento i cui metadati vuoi conservare.

Q: Cosa succede se il documento di destinazione non contiene alcuni campi di metadati?
A: Solo i metadati presenti nella destinazione verranno copiati nell'output. I campi mancanti vengono semplicemente omessi; il confronto riesce comunque.

Q: Come gestisco i documenti protetti da password?
A: Usa un oggetto LoadOptions con la password, quindi passalo al costruttore Comparer:

var loadOptions = new LoadOptions() { Password = "your_password" };
using (var comparer = new Comparer(sourceFile, loadOptions))
{
    // comparison logic here
}

Q: Esiste un modo per preservare solo proprietà di metadati selezionate?
A: L'API attuale preserva tutti i metadati dalla sorgente scelta (Destinazione o Sorgente). Per un controllo più granulare dovresti estrarre le proprietà dopo il confronto e riapplicarle manualmente.

Q: Quali formati di documento supportano la conservazione dei metadati?
A: La maggior parte dei formati aziendali comuni—DOCX, PDF, PPTX, XLSX e molti altri—supportano la conservazione dei metadati. Consulta la documentazione ufficiale per l'elenco completo.

Q: Dove posso ottenere aiuto se incontro problemi?
A: Visita il GroupDocs Support Forum per assistenza della community, o contatta direttamente il supporto GroupDocs se possiedi una licenza commerciale.

Risorse Aggiuntive


Ultimo Aggiornamento: 2026-03-06
Testato Con: GroupDocs.Comparison 25.4.0 for .NET
Autore: GroupDocs