| categories |
|
||||
|---|---|---|---|---|---|
| date | 2026-03-06 | ||||
| description | Naučte se, jak zachovat metadata cíle během porovnávání dokumentů pomocí GroupDocs.Comparison pro .NET. Průvodce krok za krokem s příklady v 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 | Zachování metadat cíle pomocí GroupDocs.Comparison – .NET tutoriál | ||||
| type | docs | ||||
| url | /cs/net/advanced-comparison/groupdocs-comparison-net-metadata-target/ | ||||
| weight | 1 |
Už jste někdy porovnávali dva dokumenty a při tom ztratili důležitá metadata? Nejste v tom sami. Když potřebujete zachovat cílová metadata při porovnávání dokumentů v .NET aplikaci, může se to zdát obtížné – ale nemusí to tak být.
GroupDocs.Comparison pro .NET vám umožňuje rozhodnout, která metadata dokumentu přežijí výsledek porovnání. Ať už budujete systém pro správu dokumentů, pracujete s právními smlouvami nebo spravujete spolupracující obsah, vždy budete chtít metadata ze správného zdrojového dokumentu.
V tomto tutoriálu se naučíte, jak zachovat cílová metadata během porovnání, vyhnout se běžným úskalím a implementovat řešení v reálných scénářích.
- Co znamená “zachovat cílová metadata”? Uchovává metadata (autor, datum vytvoření, vlastní vlastnosti atd.) z dokumentu, který označíte jako cílový, při generování výsledku porovnání.
- Jaká verze GroupDocs.Comparison je vyžadována? Verze 25.4.0 nebo novější.
- Mohu to použít s .NET Core? Ano – .NET Core 2.0+ nebo .NET Framework 4.6.1+.
- Je pro produkci potřeba licence? Pro produkci je vyžadována komerční licence; pro výuku stačí bezplatná zkušební verze.
- Funguje funkce s PDF a DOCX? Ano – všechny hlavní formáty Office a PDF podporují zachování metadat.
Než se pustíme do kódu, pojďme si probrat, proč je zachování cílových metadat důležité. Metadata dokumentu nejsou jen „pěkné mít“ – často jsou právně požadována nebo kritická pro podnikání:
- Právní dokumenty – je třeba zachovat označení advokátní‑klientské výsady.
- Firemní soubory – musí uchovávat značky souladu a schvalovací řetězce.
- Akademické práce – je nezbytné přiřazení autorství a historie revizí.
- Technická dokumentace – záleží na řízení verzí a stavu revize.
Bez řádného zacházení můžete omylem odstranit informace, na jejichž vytvoření jste strávili měsíce. Právě zde vyniká možnost zachovat cílová metadata.
- GroupDocs.Comparison pro .NET: Verze 25.4.0 nebo novější (starší verze mají omezené možnosti metadat).
- .NET Framework: 4.6.1 nebo vyšší, nebo .NET Core 2.0+.
- Visual Studio (nebo jakékoli C# IDE, které preferujete).
- Základní znalost C# (nic příliš pokročilého, slibuji!).
- Dva ukázkové dokumenty pro testování (Word .docx funguje skvěle).
Nemusíte být expertem na GroupDocs, ale měli byste se cítit pohodlně s:
- C#
usingpříkazy a manipulací se soubory. - Základními koncepty zpracování dokumentů.
- Co jsou metadata (autor, název, vlastní vlastnosti atd.).
Připravení? Nastavme to.
Instalace GroupDocs.Comparison je jednoduchá, ale je zde několik úskalí, na která je třeba si dát pozor.
NuGet Package Manager Console (nejjednodušší metoda):
Install-Package GroupDocs.Comparison -Version 25.4.0.NET CLI (pokud dáváte přednost příkazové řádce):
dotnet add package GroupDocs.Comparison --version 25.4.0Tip: Vždy specifikujte verzi, abyste se vyhnuli neočekávaným breaking changes ve vašem projektu.
Zde se mnoho vývojářů zpočátku zasekne. GroupDocs.Comparison není zdarma, ale máte možnosti:
- Bezplatná zkušební verze – plná funkčnost po 30 dnů, ideální pro hodnocení.
- Dočasná licence – prodloužené zkušební období, pokud potřebujete více času.
- Komerční licence – pro produkční použití (k dispozici různé cenové úrovně).
Nemějte teď starosti s licencí, pokud se jen učíte – zkušební verze obsahuje všechny funkce zachovat cílová metadata.
Ujistěme se, že vše funguje jednoduchým testem:
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);
}Pokud se to zkompiluje bez chyb, můžete pokračovat. Pokud ne, zkontrolujte instalaci balíčku a using příkazy.
Nyní hlavní část – skutečné zachování metadat během porovnání dokumentů. Zde GroupDocs.Comparison opravdu zazáří.
Během typického porovnání:
- Zdrojový dokument poskytuje základní obsah.
- Cílový dokument poskytuje změny, které se mají porovnat.
- Výstupní dokument kombinuje oba, ale čí metadata zvítězí?
Ve výchozím nastavení GroupDocs.Comparison používá metadata zdrojového dokumentu. Pro zachování cílových metadat musíte API explicitně říct.
Tím se stanoví „základní“ dokument – ten, se kterým porovnáváte:
using (Comparer comparer = new Comparer(sourceFilePath))
{
// All comparison operations happen within this scope
}Proč používat using příkazy? Automaticky uvolňují prostředky, což zabraňuje únikům paměti při zpracování velkých dokumentů. Věřte mi, později vám to poděkuje, když budete pracovat s 50 MB Word soubory.
Řekněte compareru, který dokument obsahuje změny, které chcete analyzovat:
comparer.Add(targetFilePath);Častá chyba: Záměna zdroje a cíle. Přemýšlejte takto – zdroj je vaše „originální“ verze, cíl je vaše „aktualizovaná“ verze.
Určete, čí metadata mají být v výstupu zachována:
comparer.Compare(outputFileName, new SaveOptions() { CloneMetadataType = MetadataType.Target });Co se děje? CloneMetadataType = MetadataType.Target říká GroupDocs.Comparison: „Hej, chci v konečném výsledku zachovat metadata cílového dokumentu.“
Zde je vše dohromady v spustitelném programu:
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}");
}
}
}Problémy s cestou k souboru – vždy používejte úplné cesty nebo zajistěte, aby soubory byly ve výchozím adresáři:
// Good
string sourceFile = Path.Combine(Directory.GetCurrentDirectory(), "docs", "source.docx");
// Risky (might work locally but fail in production)
string sourceFile = "source.docx";Správa paměti – u velkých dokumentů vždy obalte objekty Comparer do using příkazů.
Kompatibilita verzí – různé verze GroupDocs.Comparison nabízejí různé možnosti metadat – držte se verze 25.4.0 nebo novější pro nejlepší výsledky.
| Scénář | Upřednostnit metadata cíle | Upřednostnit metadata zdroje |
|---|---|---|
| Potřeba aktualizovaných informací o autorovi | ✅ | ❌ |
| Originální dokument má právní přednost | ❌ | ✅ |
| Vlastní vlastnosti přidány jen v novějším souboru | ✅ | ❌ |
| Chcete zachovat historii „hlavního“ dokumentu | ❌ | ✅ |
Můžete porovnávat s několika cílovými dokumenty a přitom zachovat metadata z prvního přidaného cíle:
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
});
}Právnické firmy často potřebují porovnávat verze smluv a zachovat specifické značky metadat:
// 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
});
}Když spolupracuje více výzkumníků, chcete zachovat nejnovější informace o autorovi:
// 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
});
}V regulovaných odvětvích je udržování metadat souhlasu kritické:
// 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
});
}Nejčastější problém. Laděte pomocí explicitních kontrol:
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;
}U dokumentů nad 10 MB zvažte tyto optimalizace:
// 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();
}Při práci s chráněnými soubory nebo síťovými sdíleními:
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 může být náročný na paměť. Používejte using příkazy pro zajištění uvolnění:
// 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!Zpracovávejte dokumenty po dávkách – pokud porovnáváte mnoho souborů, zpracovávejte je v menších skupinách, aby byl nízký odběr paměti.
Pro desktopové nebo webové aplikace obalte porovnání asynchronní metodou:
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;
}
});
}- Malé (< 1 MB) – zpracovat přímo.
- Střední (1‑10 MB) – zobrazit průběh, aby UI zůstalo responzivní.
- Velké (> 10 MB) – vždy použít asynchronní zpracování a zvážit explicitní GC, jak je uvedeno výše.
Níže je připravený kontroler, který přijímá dva nahrané soubory, provádí porovnání a vrací výsledek při zachování cílových metadat:
[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: Mohu při porovnání zachovat metadata z více cílových dokumentů?
A: Když přidáte několik cílových souborů, GroupDocs.Comparison použije metadata z prvního přidaného cílového dokumentu. Dokument, jehož metadata chcete zachovat, přidejte jako první v řetězci.
Q: Co se stane, pokud cílový dokument postrádá některá metadata?
A: Do výstupu budou zkopírována jen ta metadata, která v cíli existují. Chybějící pole jsou jednoduše vynechána; porovnání i tak uspěje.
Q: Jak zacházet s dokumenty chráněnými heslem?
A: Použijte objekt LoadOptions s heslem a poté jej předávejte konstruktoru Comparer:
var loadOptions = new LoadOptions() { Password = "your_password" };
using (var comparer = new Comparer(sourceFile, loadOptions))
{
// comparison logic here
}Q: Existuje způsob, jak zachovat jen vybrané vlastnosti metadat?
A: Aktuální API zachovává všechna metadata z vybraného zdroje (Target nebo Source). Pro detailní kontrolu byste museli po porovnání vlastnosti extrahovat a ručně je znovu aplikovat.
Q: Které formáty dokumentů podporují zachování metadat?
A: Většina běžných obchodních formátů – DOCX, PDF, PPTX, XLSX a mnoho dalších – podporuje zachování metadat. Kompletní seznam najdete v oficiální dokumentaci.
Q: Kde mohu získat pomoc, pokud narazím na problémy?
A: Navštivte Fórum podpory GroupDocs pro komunitní pomoc nebo kontaktujte přímo podporu GroupDocs, pokud máte komerční licenci.
- Oficiální dokumentace: GroupDocs.Comparison pro .NET Docs
- Reference API: Kompletní reference API
- Stáhnout nejnovější verzi: GroupDocs Downloads
- Bezplatná zkušební verze: Začněte svou zkušební verzi
- Možnosti nákupu: Licencování a ceny
Poslední aktualizace: 2026-03-06
Testováno s: GroupDocs.Comparison 25.4.0 pro .NET
Autor: GroupDocs