Skip to content

Latest commit

 

History

History
519 lines (402 loc) · 19.3 KB

File metadata and controls

519 lines (402 loc) · 19.3 KB
categories
Document Comparison
date 2026-03-06
description Erfahren Sie, wie Sie Ziel-Metadaten bei Dokumentvergleichen mit GroupDocs.Comparison für .NET erhalten. Schritt-für-Schritt-Anleitung mit C#‑Beispielen.
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 Zielmetadaten beibehalten mit GroupDocs.Comparison – .NET‑Tutorial
type docs
url /de/net/advanced-comparison/groupdocs-comparison-net-metadata-target/
weight 1

Zielmetadaten beibehalten mit GroupDocs.Comparison – .NET Tutorial

Einführung

Haben Sie schon einmal zwei Dokumente verglichen und dabei wichtige Metadaten verloren? Sie sind nicht allein. Wenn Sie Zielmetadaten beibehalten müssen, während Sie Dokumente in einer .NET‑Anwendung vergleichen, kann die Aufgabe knifflig erscheinen – muss es aber nicht.

GroupDocs.Comparison für .NET lässt Sie entscheiden, welche Dokument‑Metadaten im Vergleichsergebnis erhalten bleiben. Egal, ob Sie ein Dokumenten‑Management‑System bauen, Rechtsverträge bearbeiten oder kollaborativen Inhalt verwalten, Sie wollen jedes Mal die Metadaten aus dem richtigen Quelldokument.

In diesem Tutorial lernen Sie, wie Sie Zielmetadaten beibehalten während des Vergleichs, häufige Fallstricke vermeiden und die Lösung in realen Szenarien implementieren.

Schnelle Antworten

  • Was bedeutet „Zielmetadaten beibehalten“? Es bewahrt die Metadaten (Autor, Erstellungsdatum, benutzerdefinierte Eigenschaften usw.) des Dokuments, das Sie als Ziel festlegen, beim Erzeugen des Vergleichsergebnisses.
  • Welche GroupDocs.Comparison‑Version wird benötigt? Version 25.4.0 oder neuer.
  • Kann ich das mit .NET Core verwenden? Ja – .NET Core 2.0+ oder .NET Framework 4.6.1+.
  • Ist für die Produktion eine Lizenz erforderlich? Für die Produktion ist eine kommerzielle Lizenz erforderlich; eine kostenlose Testversion reicht für Lernzwecke.
  • Funktioniert das Feature mit PDF und DOCX? Ja – alle gängigen Office‑ und PDF‑Formate unterstützen das Beibehalten von Metadaten.

Warum das Beibehalten von Metadaten wichtig ist

Bevor wir zum Code springen, sprechen wir darüber, warum das Beibehalten von Zielmetadaten wichtig ist. Dokumenten‑Metadaten sind nicht nur „schön zu haben“ – sie sind oft gesetzlich vorgeschrieben oder geschäftskritisch:

  • Rechtsdokumente – müssen Anwalts‑Mandanten‑Privilegien‑Markierungen beibehalten.
  • Unternehmensdateien – müssen Compliance‑Tags und Genehmigungsketten erhalten.
  • Wissenschaftliche Arbeiten – Autorennennung und Versionshistorie sind essenziell.
  • Technische Dokumentation – Versionskontrolle und Review‑Status sind wichtig.

Ohne richtige Handhabung könnten Sie versehentlich Informationen entfernen, deren Erstellung Monate gedauert hat. Genau hier glänzt die Zielmetadaten‑Beibehalten‑Option.

Voraussetzungen

Erforderliche Bibliotheken und Versionen

  • GroupDocs.Comparison für .NET: Version 25.4.0 oder neuer (frühere Versionen haben eingeschränkte Metadaten‑Optionen).
  • .NET Framework: 4.6.1 oder höher, oder .NET Core 2.0+.

Umgebung einrichten

  • Visual Studio (oder jede andere bevorzugte C#‑IDE).
  • Grundkenntnisse in C# (nichts zu Fortgeschrittenes, versprochen!).
  • Zwei Beispieldokumente zum Testen (Word .docx funktioniert hervorragend).

Wissensvoraussetzungen

Sie müssen kein GroupDocs‑Experte sein, sollten aber mit Folgendem vertraut sein:

  • C# using‑Anweisungen und Dateiverarbeitung.
  • Grundlegende Konzepte der Dokumenten‑Verarbeitung.
  • Was Metadaten eigentlich sind (Autor, Titel, benutzerdefinierte Eigenschaften usw.).

Bereit? Lassen Sie uns das einrichten.

GroupDocs.Comparison für .NET einrichten

Die Installation von GroupDocs.Comparison ist unkompliziert, aber es gibt ein paar Stolperfallen.

Installationsoptionen

NuGet Package Manager Console (einfachste Methode):

Install-Package GroupDocs.Comparison -Version 25.4.0

.NET CLI (wenn Sie die Befehlszeile bevorzugen):

dotnet add package GroupDocs.Comparison --version 25.4.0

Pro‑Tipp: Geben Sie immer die Version an, um unerwartete Breaking Changes in Ihrem Projekt zu vermeiden.

Lizenzbeschaffung

Hier bleiben viele Entwickler zunächst hängen. GroupDocs.Comparison ist nicht kostenlos, aber Sie haben Optionen:

  • Kostenlose Testversion – volle Funktionalität für 30 Tage, ideal für die Evaluation.
  • Temporäre Lizenz – erweiterter Evaluationszeitraum, falls Sie mehr Zeit benötigen.
  • Kommerzielle Lizenz – für den Produktionseinsatz (verschiedene Preismodelle verfügbar).

Machen Sie sich jetzt keine Sorgen um Lizenzen, wenn Sie nur lernen – die Testversion enthält alle Zielmetadaten‑Beibehalten‑Funktionen.

Grundlegende Setup‑Verifizierung

Stellen wir sicher, dass alles mit einem einfachen Test funktioniert:

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

Wenn das ohne Fehler kompiliert, können Sie loslegen. Wenn nicht, prüfen Sie Ihre Paketinstallation und die using‑Anweisungen erneut.

Wie man Zielmetadaten beibehält

Jetzt zum Kern – das eigentliche Beibehalten von Metadaten während des Dokumentenvergleichs. Hier zeigt GroupDocs.Comparison seine Stärken.

Verständnis des Metadaten‑Flows

Während eines typischen Vergleichs:

  1. Source‑Dokument liefert den Basisinhalt.
  2. Target‑Dokument liefert die zu vergleichenden Änderungen.
  3. Das Output‑Dokument kombiniert beides, aber wessen Metadaten gewinnen?

Standardmäßig verwendet GroupDocs.Comparison die Metadaten des Source‑Dokuments. Um Zielmetadaten beizubehalten, müssen Sie die API explizit anweisen.

Schritt‑für‑Schritt‑Implementierung

Schritt 1: Comparer‑Objekt initialisieren

Damit wird das „Baseline“‑Dokument festgelegt – das Dokument, gegen das Sie vergleichen:

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

Warum using‑Anweisungen verwenden? Sie entsorgen Ressourcen automatisch und verhindern Speicherlecks bei großen Dokumenten. Vertrauen Sie mir, Sie werden sich später bedanken, wenn Sie mit 50 MB‑Word‑Dateien arbeiten.

Schritt 2: Ziel‑Dokument hinzufügen

Teilen Sie dem Comparer mit, welches Dokument die zu analysierenden Änderungen enthält:

comparer.Add(targetFilePath);

Häufiger Fehler: Verwechseln von Source und Target. Denken Sie so: Source ist Ihr „Original“, Target ist Ihre „aktualisierte Version“.

Schritt 3: Metadaten‑Typ festlegen (Hier passiert die Magie)

Geben Sie an, welche Dokument‑Metadaten im Ergebnis erhalten bleiben sollen:

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

Was passiert? CloneMetadataType = MetadataType.Target sagt GroupDocs.Comparison: „Hey, ich möchte die Metadaten des Ziel‑Dokuments im Endergebnis behalten.“

Komplettes funktionierendes Beispiel

Hier ist alles zusammen in einem ausführbaren Programm:

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

Häufige Fallstricke, die Sie vermeiden sollten

Dateipfad‑Probleme – immer vollständige Pfade verwenden oder sicherstellen, dass Ihre Dateien im Arbeitsverzeichnis liegen:

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

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

Speicherverwaltung – bei großen Dokumenten immer Comparer‑Objekte in using‑Blöcken einbetten.

Versionskompatibilität – verschiedene GroupDocs.Comparison‑Releases bieten unterschiedliche Metadaten‑Optionen – bleiben Sie bei 25.4.0 oder neuer für optimale Ergebnisse.

Erweiterte Metadaten‑Szenarien

Wann Target‑ vs. Source‑Metadaten verwenden

Szenario Bevorzugen Target‑Metadaten Bevorzugen Source‑Metadaten
Aktualisierte Autoren‑Info benötigt
Originaldokument hat rechtliche Priorität
Benutzerdefinierte Eigenschaften nur in neuer Datei
Sie möchten die Historie des „Master“‑Dokuments behalten

Umgang mit mehreren Ziel‑Dokumenten

Sie können gegen mehrere Targets vergleichen und dennoch die Metadaten des ersten hinzugefügten Targets beibehalten:

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

Praktische Anwendungen und Anwendungsfälle

Rechtsdokumenten‑Management

Anwaltskanzleien müssen häufig Vertragsversionen vergleichen und dabei bestimmte Metadaten‑Marker beibehalten:

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

Akademische und Forschungs‑Kollaboration

Wenn mehrere Forschende zusammenarbeiten, wollen Sie die aktuellsten Autor‑Informationen beibehalten:

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

Unternehmens‑Compliance‑Workflows

In regulierten Branchen ist das Aufrechterhalten von Compliance‑Metadaten entscheidend:

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

Fehlersuche bei häufigen Problemen

„File Not Found“-Fehler

Das häufigste Problem. Debuggen Sie mit expliziten Prüfungen:

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

Speicherprobleme bei großen Dokumenten

Für Dokumente über 10 MB sollten Sie folgende Optimierungen in Betracht ziehen:

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

Berechtigungs‑ und Zugriffsprobleme

Beim Arbeiten mit geschützten Dateien oder Netzwerkfreigaben:

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

Leistungsüberlegungen und bewährte Methoden

Speicherverwaltung

GroupDocs.Comparison kann speicherintensiv sein. Nutzen Sie using‑Anweisungen, um die Entsorgung sicherzustellen:

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

Dokumente stapelweise verarbeiten – wenn Sie viele Dateien vergleichen, bearbeiten Sie sie in kleineren Gruppen, um den Speicherverbrauch gering zu halten.

Asynchrone Operationen für bessere Responsivität

Für Desktop‑ oder Web‑Apps wickeln Sie den Vergleich in eine async‑Methode ein:

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

Dateigrößen‑Richtlinien

  • Klein (< 1 MB) – direkt verarbeiten.
  • Mittel (1‑10 MB) – Fortschritt anzeigen, um UI‑Responsivität zu erhalten.
  • Groß (> 10 MB) – immer asynchron verarbeiten und ggf. explizites GC wie oben gezeigt einsetzen.

Integration in größere Systeme

ASP.NET Core Integration

Unten finden Sie einen sofort einsatzbereiten Controller, der zwei hochgeladene Dateien entgegennimmt, den Vergleich ausführt und das Ergebnis zurückgibt, während Zielmetadaten beibehalten werden:

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

Häufig gestellte Fragen

Q: Kann ich Metadaten von mehreren Ziel‑Dokumenten beim Vergleich beibehalten?
A: Wenn Sie mehrere Ziel‑Dateien hinzufügen, verwendet GroupDocs.Comparison die Metadaten des ersten hinzugefügten Ziel‑Dokuments. Fügen Sie das Dokument, dessen Metadaten Sie behalten möchten, zuerst in die Kette ein.

Q: Was passiert, wenn das Ziel‑Dokument einige Metadaten‑Felder nicht enthält?
A: Nur die im Ziel vorhandenen Metadaten werden in das Ergebnis kopiert. Fehlende Felder werden einfach weggelassen; der Vergleich schlägt trotzdem fehl.

Q: Wie gehe ich mit passwortgeschützten Dokumenten um?
A: Verwenden Sie ein LoadOptions‑Objekt mit dem Passwort und übergeben Sie es dem Comparer‑Konstruktor:

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

Q: Gibt es eine Möglichkeit, nur ausgewählte Metadaten‑Eigenschaften beizubehalten?
A: Die aktuelle API bewahrt alle Metadaten der gewählten Quelle (Target oder Source). Für eine feinkörnige Kontrolle müssten Sie die Eigenschaften nach dem Vergleich extrahieren und manuell wieder anwenden.

Q: Welche Dokumentformate unterstützen das Beibehalten von Metadaten?
A: Die meisten gängigen Business‑Formate – DOCX, PDF, PPTX, XLSX und viele weitere – unterstützen das Beibehalten von Metadaten. Siehe die offizielle Dokumentation für die vollständige Liste.

Q: Wo bekomme ich Hilfe, wenn ich auf Probleme stoße?
A: Besuchen Sie das GroupDocs Support Forum für Community‑Unterstützung oder kontaktieren Sie den GroupDocs‑Support direkt, wenn Sie eine kommerzielle Lizenz besitzen.

Zusätzliche Ressourcen


Zuletzt aktualisiert: 2026-03-06
Getestet mit: GroupDocs.Comparison 25.4.0 für .NET
Autor: GroupDocs