Skip to content

Latest commit

 

History

History
531 lines (403 loc) · 20.5 KB

File metadata and controls

531 lines (403 loc) · 20.5 KB
categories
Document Comparison
date 2026-03-06
description GroupDocs.Comparison for .NET を使用したドキュメント比較時に、対象メタデータを保持する方法を学びましょう。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 GroupDocs.Comparisonで対象メタデータを保持する – .NETチュートリアル
type docs
url /ja/net/advanced-comparison/groupdocs-comparison-net-metadata-target/
weight 1

GroupDocs.Comparison でターゲットメタデータを保持する – .NET チュートリアル

はじめに

2つの文書を比較した際に重要なメタデータが失われたことはありませんか? あなただけではありません。.NET アプリケーションで文書を比較しながら preserve target metadata を保持する必要があると、作業が難しく感じるかもしれませんが、そうである必要はありません。

GroupDocs.Comparison for .NET を使用すると、比較結果に残すメタデータをどの文書にするか選択できます。文書管理システムを構築する場合でも、法的契約書を扱う場合でも、共同作業コンテンツを管理する場合でも、常に適切なソース文書のメタデータを取得したいでしょう。

このチュートリアルでは、比較中に preserve target metadata を保持する方法、一般的な落とし穴を回避する方法、そして実際のシナリオでの実装方法を学びます。

クイック回答

  • “preserve target metadata” とは何ですか? 比較結果を生成する際に、ターゲットとして指定した文書のメタデータ(作成者、作成日、カスタムプロパティなど)を保持します。
  • 必要な GroupDocs.Comparison のバージョンは? バージョン 25.4.0 以降。
  • .NET Core でも使用できますか? はい – .NET Core 2.0+ または .NET Framework 4.6.1+。
  • 本番環境でライセンスは必要ですか? 本番環境では商用ライセンスが必要です。学習目的であれば無料トライアルで動作します。
  • PDF と DOCX でも機能しますか? はい – 主要な Office および PDF フォーマットはメタデータ保持をサポートしています。

なぜメタデータ保持が重要なのか

コードに入る前に、なぜターゲットメタデータを保持することが重要かを説明します。文書メタデータは「あると便利」だけでなく、法的に要求されたりビジネス上重要だったりすることが多いです:

  • Legal documents – 弁護士‑依頼者特権のマーカーを保持する必要があります。
  • Corporate files – コンプライアンスタグや承認チェーンを保持しなければなりません。
  • Academic papers – 著者の帰属と改訂履歴が必須です。
  • Technical documentation – バージョン管理とレビュー状態が重要です。

適切に処理しないと、数か月かけて蓄積した情報が誤って削除される可能性があります。そこで preserve target metadata オプションが活躍します。

前提条件

必要なライブラリとバージョン

  • GroupDocs.Comparison for .NET: バージョン 25.4.0 以降(それ以前のバージョンはメタデータオプションが制限されています)。
  • .NET Framework: 4.6.1 以上、または .NET Core 2.0+。

環境設定

  • Visual Studio(またはお好みの C# IDE)。
  • 基本的な C# の知識(高度なものは不要です、約束します!)。
  • テスト用のサンプル文書 2 件(Word .docx が最適です)。

知識の前提条件

GroupDocs の専門家である必要はありませんが、以下に慣れている必要があります:

  • C# の using 文とファイル操作。
  • 基本的な文書処理の概念。
  • メタデータとは何か(作成者、タイトル、カスタムプロパティなど)。

準備はできましたか?設定を始めましょう。

GroupDocs.Comparison for .NET の設定

GroupDocs.Comparison のインストールは簡単ですが、注意すべき点がいくつかあります。

インストールオプション

NuGet Package Manager Console(最も簡単な方法):

Install-Package GroupDocs.Comparison -Version 25.4.0

.NET CLI(コマンドラインが好みの場合):

dotnet add package GroupDocs.Comparison --version 25.4.0

プロのコツ: 予期しない破壊的変更を防ぐため、常にバージョンを指定してください。

ライセンス取得

ここで多くの開発者が最初に詰まります。GroupDocs.Comparison は無料ではありませんが、選択肢があります:

  • Free Trial – 30 日間フル機能が利用でき、評価に最適です。
  • Temporary License – もっと時間が必要な場合の延長評価期間です。
  • Commercial License – 本番利用向け(さまざまな価格プランがあります)。

学習中であれば今すぐライセンスを取得する必要はありません—トライアル版にはすべての preserve target metadata 機能が含まれています。

基本設定の検証

簡単なテストで動作を確認しましょう:

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

エラーなくコンパイルできれば準備完了です。エラーが出た場合は、パッケージのインストールと using 文を再確認してください。

ターゲットメタデータを保持する方法

本題です—文書比較中に実際にメタデータを保持します。ここが GroupDocs.Comparison の真価が発揮されるポイントです。

メタデータフローの理解

一般的な比較の流れは次の通りです:

  1. Source document がベースコンテンツを提供します。
  2. Target document が比較対象となる変更を提供します。
  3. output document が両方を統合しますが、どちらのメタデータが採用されるでしょうか?

デフォルトでは、GroupDocs.Comparison は source document のメタデータを使用します。preserve target metadata を行うには、API に明示的に指示する必要があります。

手順別実装

手順 1: Comparer オブジェクトの初期化

これにより、比較対象となる「ベースライン」文書が設定されます:

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

using 文を使用する理由: 大きな文書を処理する際にリソースを自動的に解放し、メモリリークを防ぎます。50 MB の Word ファイルを扱うときに後で感謝するでしょう。

手順 2: ターゲット文書の追加

比較対象となる変更が含まれる文書を comparer に指示します:

comparer.Add(targetFilePath);

よくある間違い: source と target を取り違えることです。source は「元の文書」、target は「更新されたバージョン」と考えてください。

手順 3: メタデータタイプの設定(ここがポイント)

出力に保持するメタデータの文書を指定します:

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

何が起きているのか? CloneMetadataType = MetadataType.Target は GroupDocs.Comparison に「最終結果のメタデータはターゲット文書のものを保持したい」と指示しています。

完全な動作例

以下は実行可能なプログラム全体です:

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

回避すべき一般的な落とし穴

  • File Path Issues – 常にフルパスを使用するか、ファイルが作業ディレクトリにあることを確認してください:
// Good
string sourceFile = Path.Combine(Directory.GetCurrentDirectory(), "docs", "source.docx");

// Risky (might work locally but fail in production)
string sourceFile = "source.docx";
  • Memory Management – 大きな文書の場合は、常に Comparer オブジェクトを using 文でラップしてください。

  • Version Compatibility – 異なる GroupDocs.Comparison のリリースではメタデータオプションが異なります。ベストな結果を得るには 25.4.0 以降を使用してください。

高度なメタデータシナリオ

ターゲットメタデータとソースメタデータを使い分けるとき

シナリオ Target メタデータを優先 Source メタデータを優先
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

複数のターゲット文書を扱う

複数のターゲットと比較できますが、最初に追加したターゲットのメタデータが保持されます:

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

実用的な応用例とユースケース

法務文書管理

法律事務所では、契約バージョンを比較しつつ特定のメタデータマーカーを保持する必要があります:

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

学術・研究の共同作業

複数の研究者が共同作業する際、最新の著者情報を保持したいです:

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

企業コンプライアンスワークフロー

規制産業では、コンプライアンスメタデータの維持が重要です:

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

一般的な問題のトラブルシューティング

“File Not Found” エラー

最も一般的な問題です。明示的なチェックでデバッグしてください:

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

大容量文書のメモリ問題

10 MB 超の文書については、以下の最適化を検討してください:

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

権限とアクセスの問題

保護されたファイルやネットワーク共有を扱う場合:

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 はメモリ集中的です。using 文を使用して確実に解放してください:

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

バッチ処理 – 多数のファイルを比較する場合は、メモリ使用量を抑えるために小さなグループに分けて処理してください。

非同期操作で応答性向上

デスクトップまたは Web アプリでは、比較処理を非同期メソッドでラップします:

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

ファイルサイズのガイドライン

  • Small (< 1 MB) – 直接処理。
  • Medium (1‑10 MB) – UI の応答性を保つために進捗を表示。
  • Large (> 10 MB) – 常に非同期処理を使用し、上記のように明示的な GC を検討してください。

大規模システムとの統合

ASP.NET Core 統合

以下は、2 つのアップロードファイルを受け取り、比較を実行し、preserve target metadata を保持した結果を返す、すぐに使用できるコントローラです:

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

FAQ

Q: 複数のターゲット文書からメタデータを保持できますか?
A: 複数のターゲットファイルを追加した場合、GroupDocs.Comparison は最初に追加した target 文書のメタデータを使用します。保持したいメタデータを持つ文書を最初に追加してください。

Q: ターゲット文書にメタデータフィールドが欠けている場合はどうなりますか?
A: ターゲットに存在するメタデータだけが出力にコピーされます。欠けているフィールドは単に省略され、比較は正常に完了します。

Q: パスワード保護された文書はどう扱いますか?
A: パスワードを含む LoadOptions オブジェクトを作成し、それを Comparer コンストラクタに渡します:

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

Q: 特定のメタデータプロパティだけを保持する方法はありますか?
A: 現行 API は選択したソース(Target または Source)の すべて のメタデータを保持します。個別に制御したい場合は、比較後にプロパティを抽出し、手動で再適用する必要があります。

Q: どの文書フォーマットがメタデータ保持をサポートしていますか?
A: 主なビジネスフォーマット(DOCX、PDF、PPTX、XLSX など)ほとんどがメタデータ保持をサポートしています。完全なリストは公式ドキュメントをご参照ください。

Q: 問題が発生した場合、どこでサポートを受けられますか?
A: コミュニティ支援は GroupDocs Support Forum をご利用ください。商用ライセンスをお持ちの場合は、直接 GroupDocs サポートにお問い合わせいただけます。

追加リソース


最終更新日: 2026-03-06
テスト環境: GroupDocs.Comparison 25.4.0 for .NET
作者: GroupDocs