| categories |
|
||||
|---|---|---|---|---|---|
| date | 2026-03-06 | ||||
| description | Pelajari cara mempertahankan metadata target selama perbandingan dokumen menggunakan GroupDocs.Comparison untuk .NET. Panduan langkah demi langkah dengan contoh 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 | Mempertahankan Metadata Target dengan GroupDocs.Comparison – Tutorial .NET | ||||
| type | docs | ||||
| url | /id/net/advanced-comparison/groupdocs-comparison-net-metadata-target/ | ||||
| weight | 1 |
Pernah membandingkan dua dokumen hanya untuk kehilangan metadata penting dalam prosesnya? Anda tidak sendirian. Ketika Anda perlu mempertahankan metadata target saat membandingkan dokumen dalam aplikasi .NET, tugas ini bisa terasa rumit—tetapi tidak harus begitu.
GroupDocs.Comparison untuk .NET memungkinkan Anda menentukan metadata dokumen mana yang akan dipertahankan pada hasil perbandingan. Baik Anda sedang membangun sistem manajemen dokumen, menangani kontrak hukum, atau mengelola konten kolaboratif, Anda pasti ingin metadata dari dokumen sumber yang tepat setiap saat.
Dalam tutorial ini Anda akan belajar cara mempertahankan metadata target selama perbandingan, menghindari jebakan umum, dan mengimplementasikan solusi dalam skenario dunia nyata.
- Apa arti “mempertahankan metadata target”? Itu menjaga metadata (penulis, tanggal pembuatan, properti khusus, dll.) dari dokumen yang Anda tetapkan sebagai target saat menghasilkan hasil perbandingan.
- Versi GroupDocs.Comparison mana yang diperlukan? Versi 25.4.0 atau lebih baru.
- Bisakah saya menggunakan ini dengan .NET Core? Ya – .NET Core 2.0+ atau .NET Framework 4.6.1+.
- Apakah lisensi diperlukan untuk produksi? Lisensi komersial diperlukan untuk produksi; versi percobaan gratis cukup untuk belajar.
- Apakah fitur ini bekerja dengan PDF dan DOCX? Ya – semua format Office utama dan PDF mendukung preservasi metadata.
Sebelum masuk ke kode, mari bahas mengapa mempertahankan metadata target penting. Metadata dokumen bukan sekadar “bagus untuk dimiliki”—seringkali diperlukan secara hukum atau kritis bagi bisnis:
- Dokumen hukum – harus mempertahankan penanda hak istimewa pengacara‑klien.
- File korporat – harus menyimpan tag kepatuhan dan rantai persetujuan.
- Makalah akademik – atribusi penulis dan riwayat revisi sangat penting.
- Dokumentasi teknis – kontrol versi dan status tinjauan sangat berpengaruh.
Tanpa penanganan yang tepat, Anda mungkin secara tidak sengaja menghapus informasi yang memakan berbulan‑bulan untuk dibangun. Di sinilah opsi mempertahankan metadata target bersinar.
- GroupDocs.Comparison untuk .NET: Versi 25.4.0 atau lebih baru (versi sebelumnya memiliki opsi metadata terbatas).
- .NET Framework: 4.6.1 atau lebih tinggi, atau .NET Core 2.0+.
- Visual Studio (atau IDE C# lain yang Anda sukai).
- Pengetahuan dasar C# (tidak terlalu rumit, janji!).
- Dua dokumen contoh untuk pengujian (Word .docx sangat cocok).
Anda tidak perlu menjadi ahli GroupDocs, tetapi sebaiknya nyaman dengan:
- Pernyataan
usingC# dan penanganan file. - Konsep dasar pemrosesan dokumen.
- Apa itu metadata (penulis, judul, properti khusus, dll.).
Siap? Mari siapkan semuanya.
Menginstal GroupDocs.Comparison cukup mudah, namun ada beberapa hal yang perlu diwaspadai.
NuGet Package Manager Console (metode termudah):
Install-Package GroupDocs.Comparison -Version 25.4.0.NET CLI (jika Anda lebih suka command line):
dotnet add package GroupDocs.Comparison --version 25.4.0Tips pro: Selalu tentukan versi untuk menghindari perubahan yang tidak terduga pada proyek Anda.
Di sinilah banyak pengembang terhenti pada awalnya. GroupDocs.Comparison tidak gratis, tetapi Anda memiliki pilihan:
- Trial Gratis – fungsionalitas penuh selama 30 hari, cocok untuk evaluasi.
- Lisensi Sementara – periode evaluasi diperpanjang jika Anda butuh waktu lebih lama.
- Lisensi Komersial – untuk penggunaan produksi (berbagai tingkatan harga tersedia).
Jangan khawatir tentang lisensi sekarang jika Anda hanya belajar—versi percobaan sudah mencakup semua fitur mempertahankan metadata target.
Mari pastikan semuanya berjalan dengan tes sederhana:
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);
}Jika ini berhasil dikompilasi tanpa error, Anda siap melanjutkan. Jika tidak, periksa kembali instalasi paket dan pernyataan using Anda.
Sekarang ke inti—mempertahankan metadata selama perbandingan dokumen. Di sinilah GroupDocs.Comparison benar‑benar bersinar.
Selama perbandingan tipikal:
- Dokumen sumber menyediakan konten dasar.
- Dokumen target menyediakan perubahan yang akan dibandingkan.
- Dokumen output menggabungkan keduanya, tetapi metadata milik siapa yang dipertahankan?
Secara default, GroupDocs.Comparison menggunakan metadata dokumen sumber. Untuk mempertahankan metadata target, Anda harus memberi tahu API secara eksplisit.
Ini menetapkan dokumen “baseline” — dokumen yang Anda bandingkan:
using (Comparer comparer = new Comparer(sourceFilePath))
{
// All comparison operations happen within this scope
}Mengapa menggunakan pernyataan using? Mereka secara otomatis membuang sumber daya, mencegah kebocoran memori saat memproses dokumen besar. Percayalah, Anda akan berterima kasih nanti saat menangani file Word 50 MB.
Beritahu comparer dokumen mana yang berisi perubahan yang ingin Anda analisis:
comparer.Add(targetFilePath);Kesalahan umum: Membingungkan sumber dan target. Anggap saja sumber adalah “asli” Anda, target adalah “versi yang diperbarui”.
Tentukan metadata dokumen mana yang harus dipertahankan pada output:
comparer.Compare(outputFileName, new SaveOptions() { CloneMetadataType = MetadataType.Target });Apa yang terjadi? CloneMetadataType = MetadataType.Target memberi tahu GroupDocs.Comparison: “Hei, saya ingin mempertahankan metadata dokumen target pada hasil akhir saya.”
Berikut semua kode digabungkan dalam program yang dapat dijalankan:
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}");
}
}
}Masalah Jalur File – selalu gunakan jalur lengkap atau pastikan file berada di direktori kerja:
// Good
string sourceFile = Path.Combine(Directory.GetCurrentDirectory(), "docs", "source.docx");
// Risky (might work locally but fail in production)
string sourceFile = "source.docx";Manajemen Memori – untuk dokumen besar, selalu bungkus objek Comparer dalam pernyataan using.
Kompatibilitas Versi – rilis GroupDocs.Comparison yang berbeda mengekspor opsi metadata yang berbeda—gunakan 25.4.0 atau lebih baru untuk hasil terbaik.
| Skenario | Lebih Memilih Metadata Target | Lebih Memilih Metadata Source |
|---|---|---|
| Informasi penulis yang diperbarui diperlukan | ✅ | ❌ |
| Dokumen asli memiliki kedudukan hukum | ❌ | ✅ |
| Properti khusus hanya ditambahkan di file yang lebih baru | ✅ | ❌ |
| Anda ingin mempertahankan riwayat dokumen “master” | ❌ | ✅ |
Anda dapat membandingkan terhadap beberapa target sekaligus sambil tetap mempertahankan metadata dari target pertama yang Anda tambahkan:
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
});
}Firma hukum sering perlu membandingkan versi kontrak sambil mempertahankan penanda metadata tertentu:
// 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
});
}Saat banyak peneliti berkolaborasi, Anda ingin mempertahankan informasi penulis terbaru:
// 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
});
}Di industri yang diatur, menjaga metadata kepatuhan sangat penting:
// 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
});
}Masalah paling umum. Debug dengan pemeriksaan eksplisit:
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;
}Untuk dokumen > 10 MB, pertimbangkan optimalisasi berikut:
// 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();
}Saat bekerja dengan file yang dilindungi atau share jaringan:
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 dapat mengonsumsi banyak memori. Gunakan pernyataan using untuk menjamin pembuangan:
// 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!Proses Dokumen dalam Batch – jika Anda membandingkan banyak file, tangani dalam kelompok kecil untuk menjaga penggunaan memori tetap rendah.
Untuk aplikasi desktop atau web, bungkus perbandingan dalam metode 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;
}
});
}- Kecil (< 1 MB) – proses langsung.
- Sedang (1‑10 MB) – tampilkan progres agar UI tetap responsif.
- Besar (> 10 MB) – selalu gunakan pemrosesan async dan pertimbangkan pemanggilan GC eksplisit seperti contoh di atas.
Berikut contoh controller siap pakai yang menerima dua file yang di‑upload, menjalankan perbandingan, dan mengembalikan hasil sambil mempertahankan metadata target:
[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);
}
}
}T: Bisakah saya mempertahankan metadata dari beberapa dokumen target saat membandingkan?
J: Ketika Anda menambahkan beberapa file target, GroupDocs.Comparison menggunakan metadata dari dokumen target pertama yang ditambahkan. Tambahkan dokumen yang metadata‑nya ingin Anda pertahankan pertama dalam urutan.
T: Apa yang terjadi jika dokumen target tidak memiliki beberapa bidang metadata?
J: Hanya metadata yang ada pada target yang akan disalin ke output. bidang yang tidak ada cukup diabaikan; perbandingan tetap berhasil.
T: Bagaimana cara menangani dokumen yang dilindungi password?
J: Gunakan objek LoadOptions dengan password, lalu berikan ke konstruktor Comparer:
var loadOptions = new LoadOptions() { Password = "your_password" };
using (var comparer = new Comparer(sourceFile, loadOptions))
{
// comparison logic here
}T: Apakah ada cara untuk hanya mempertahankan properti metadata tertentu?
J: API saat ini mempertahankan semua metadata dari sumber yang dipilih (Target atau Source). Untuk kontrol granular, Anda harus mengekstrak properti setelah perbandingan dan menerapkannya kembali secara manual.
T: Format dokumen apa yang mendukung preservasi metadata?
J: Sebagian besar format bisnis umum—DOCX, PDF, PPTX, XLSX, dan banyak lainnya—mendukung preservasi metadata. Lihat dokumentasi resmi untuk daftar lengkap.
T: Di mana saya dapat mendapatkan bantuan jika mengalami masalah?
J: Kunjungi Forum Dukungan GroupDocs untuk bantuan komunitas, atau hubungi dukungan GroupDocs langsung jika Anda memiliki lisensi komersial.
- Dokumentasi Resmi: GroupDocs.Comparison untuk .NET Docs
- Referensi API: Referensi API Lengkap
- Unduh Versi Terbaru: Unduhan GroupDocs
- Trial Gratis: Mulai Trial Anda
- Opsi Pembelian: Lisensi dan Harga
Terakhir Diperbarui: 2026-03-06
Diuji Dengan: GroupDocs.Comparison 25.4.0 untuk .NET
Penulis: GroupDocs