Skip to content

Latest commit

 

History

History
522 lines (404 loc) · 18.5 KB

File metadata and controls

522 lines (404 loc) · 18.5 KB
categories
Document Comparison
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
GroupDocs.Comparison
metadata-preservation
dotnet-tutorial
document-management
title Mempertahankan Metadata Target dengan GroupDocs.Comparison – Tutorial .NET
type docs
url /id/net/advanced-comparison/groupdocs-comparison-net-metadata-target/
weight 1

Mempertahankan Metadata Target dengan GroupDocs.Comparison – Tutorial .NET

Pendahuluan

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.

Jawaban Cepat

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

Mengapa Preservasi Metadata Penting

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.

Prasyarat

Perpustakaan dan Versi yang Diperlukan

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

Penyiapan Lingkungan

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

Prasyarat Pengetahuan

Anda tidak perlu menjadi ahli GroupDocs, tetapi sebaiknya nyaman dengan:

  • Pernyataan using C# dan penanganan file.
  • Konsep dasar pemrosesan dokumen.
  • Apa itu metadata (penulis, judul, properti khusus, dll.).

Siap? Mari siapkan semuanya.

Menyiapkan GroupDocs.Comparison untuk .NET

Menginstal GroupDocs.Comparison cukup mudah, namun ada beberapa hal yang perlu diwaspadai.

Opsi Instalasi

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

Tips pro: Selalu tentukan versi untuk menghindari perubahan yang tidak terduga pada proyek Anda.

Akuisisi Lisensi

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.

Verifikasi Penyiapan Dasar

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.

Cara Mempertahankan Metadata Target

Sekarang ke inti—mempertahankan metadata selama perbandingan dokumen. Di sinilah GroupDocs.Comparison benar‑benar bersinar.

Memahami Alur Metadata

Selama perbandingan tipikal:

  1. Dokumen sumber menyediakan konten dasar.
  2. Dokumen target menyediakan perubahan yang akan dibandingkan.
  3. 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.

Implementasi Langkah‑per‑Langkah

Langkah 1: Inisialisasi Objek Comparer Anda

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.

Langkah 2: Tambahkan Dokumen Target

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

Langkah 3: Atur Tipe Metadata (Di Sinilah Magis Terjadi)

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

Contoh Program Lengkap

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

Jebakan Umum yang Harus Dihindari

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 Metadata Lanjutan

Kapan Menggunakan Metadata Target vs. Source

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”

Menangani Beberapa Dokumen Target

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

Aplikasi Praktis dan Kasus Penggunaan

Manajemen Dokumen Hukum

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

Kolaborasi Akademik dan Penelitian

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

Alur Kerja Kepatuhan Korporat

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

Memecahkan Masalah Umum

Error “File Not Found”

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

Masalah Memori pada Dokumen Besar

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

Masalah Izin dan Akses

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

Pertimbangan Performa dan Praktik Terbaik

Manajemen Memori

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.

Operasi Async untuk Responsivitas Lebih Baik

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

Pedoman Ukuran File

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

Integrasi dengan Sistem Lebih Besar

Integrasi ASP.NET Core

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

Pertanyaan yang Sering Diajukan

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.

Sumber Daya Tambahan


Terakhir Diperbarui: 2026-03-06
Diuji Dengan: GroupDocs.Comparison 25.4.0 untuk .NET
Penulis: GroupDocs