目錄

概述

在各種檔案格式中管理文件中繼資料可能相當具挑戰性。GroupDocs.Metadata for .NET 透過提供標籤系統,將常見的中繼資料屬性(例如標題、作者、建立日期)統一於標籤下,簡化此流程。在本教學指南中,我們將探討如何使用 GroupDocs.Metadata for .NET 透過標籤來查找、新增、複製、更新與移除中繼資料。

GroupDocs.Metadata 使用標籤來為檔案中的重要中繼資料屬性貼上標記,無論文件的格式或中繼資料標準為何。每個標籤屬於一個類別,該類別會將相關標籤彙集,以便更輕鬆地發現。例如:

  • 內容標籤:描述檔案內容(例如語言、類型、主題、評分)
  • 人物標籤:識別與內容相關的人員或組織(例如文件創建者、編輯者、公司)
  • 時間標籤:表示檔案生命週期中的時間戳記(例如建立日期、最後修改時間、列印日期) (其他類別還包括法律、來源、工具等,每個類別皆彙集相關標籤。)

利用這些標籤,您可以在 Word 文件、PDF、影像等多種檔案類型之間,以統一的方式搜尋與操作中繼資料。例如,人物類別中的「作者」或「創建者」標籤會對應 Word 文件或 PDF 中的作者屬性,而無需了解格式特定的中繼資料欄位名稱。這使得標籤在組織檔案與自動化中繼資料管理任務時極為有用。

使用情境

本節將介紹不同的使用情境,以突顯實際應用。

依標籤查找中繼資料屬性

常見的情境是依標籤在檔案中找出中繼資料條目。此方式特別有助於提升可搜尋性——您可以從任何文件中取得特定資訊,且不需關心其格式。

步驟

  1. 將檔案載入 Metadata 物件。
  2. 使用 FindProperties() 搭配基於標籤的謂詞來尋找屬性。您可以依單一標籤或整個類別過濾。
  3. 迭代結果以檢視或使用中繼資料。
// Load the source document (e.g., a PowerPoint file)
using (Metadata metadata = new Metadata("source.pptx"))
{
    // Find properties tagged as "last editor" or "last modified time"
    var properties = metadata.FindProperties(p => 
        p.Tags.Contains(Tags.Person.Editor) || 
        p.Tags.Contains(Tags.Time.Modified));

    // List the found properties and their values
    foreach (var property in properties)
    {
        Console.WriteLine($"Property name: {property.Name}, Value: {property.Value}");
    }
}

依標籤新增中繼資料屬性

有時檔案可能缺少某些中繼資料(例如未記錄「最後列印日期」)。使用 GroupDocs.Metadata,您可以透過指定標籤來新增中繼資料屬性,API 會在格式支援的情況下將其放入適當的中繼資料封裝中。

步驟

  1. 將檔案載入 Metadata 物件。
  2. 呼叫 AddProperties() 並提供用於辨識新增位置的謂詞,並給予新屬性值。
  3. 檢查回傳值以了解新增了多少屬性。
  4. 若要永久保存變更,請儲存文件。

以下程式碼示範若檔案尚未具備「最後列印」日期/時間,則為其新增:

using (Metadata metadata = new Metadata("source.pdf"))
{
    if (metadata.FileFormat != FileFormat.Unknown && !metadata.GetDocumentInfo().IsEncrypted)
    {
        // Add a "Last Printed" date property if it's missing
        int affected = metadata.AddProperties(
            p => p.Tags.Contains(Tags.Time.Printed),
            new PropertyValue(DateTime.Now));

        Console.WriteLine("Properties added: " + affected);
        metadata.Save("output.pdf");
    }
}

此處使用 Tags.Time.Printed——時間類別下的「列印」日期標籤。謂詞 p.Tags.Contains(Tags.Time.Printed) 針對已知的列印中繼資料屬性。如果該屬性缺失,AddProperties 會以我們提供的值(此例為 DateTime.Now)新增它。方法回傳新增的屬性數量(affected),我們將其輸出,最後儲存檔案以永續新中繼資料。

依標籤複製中繼資料屬性

有時您只想複製特定類型的中繼資料,例如作者名稱或建立日期。CopyTo 方法允許您使用謂詞過濾欲複製的屬性。以下示範如何僅複製與作者或建立日期相關的中繼資料:

步驟

  1. 分別使用 Metadata 類別載入來源檔案與目標檔案。
  2. 使用 CopyTo 方法將中繼資料從來源傳輸至目標。
  3. 儲存目標檔案以套用已複製的中繼資料。
using (Metadata sourceMetadata = new Metadata("source.xlsx"))
using (Metadata targetMetadata = new Metadata("target.pptx"))
{
    // Copy only Author (Creator) and Creation Date metadata properties
    sourceMetadata.CopyTo(targetMetadata, p =>
        p.Tags.Contains(Tags.Person.Creator) ||
        p.Tags.Contains(Tags.Time.Created));

    // Save the changes
    targetMetadata.Save();
}

在此範例中,只有標記為 Creator(作者名稱)與 Created(建立日期)的中繼資料會從 Excel(source.xlsx)複製至 PowerPoint(target.pptx)。此種挑選性複製讓您對中繼資料擁有精確控制,確保文件僅包含您所需的資訊。

依標籤更新中繼資料屬性

除了新增外,您常需要更新已存在的中繼資料值(例如更正作者姓名或統一日期格式)。GroupDocs.Metadata 提供 SetProperties() 方法,透過標籤找出目標屬性並更新其值。若目標屬性缺失,SetProperties 也會自動新增——相當於一次完成更新與新增。

步驟

  1. 將檔案載入 Metadata 物件。
  2. 呼叫 SetProperties(),傳入基於標籤的過濾條件與新的 PropertyValue
  3. 檢查回傳的受影響屬性數量(已更新或已新增)。
  4. 如有需要,將更改儲存回檔案。

以下範例示範將文件的建立日期與修改日期更新為目前的日期/時間(可用於重新設定或統一時間戳記):

using (Metadata metadata = new Metadata("source.pdf"))
{
    // Update all "Created" or "Modified" date properties to now
    int affected = metadata.SetProperties(
        p => p.Tags.Contains(Tags.Time.Created) || p.Tags.Contains(Tags.Time.Modified),
        new PropertyValue(DateTime.Now));

    Console.WriteLine("Properties updated or added: " + affected);
    metadata.Save("updated.pdf");
}

在謂詞中,Tags.Time.CreatedTags.Time.Modified 分別代表建立日期與最後修改日期的標籤。程式會找出任何具備上述標籤的中繼資料屬性,並將其設為 DateTime.Now。若檔案中缺少建立日期屬性,函式也會自動新增(因為此屬性在該格式中屬於已知標準屬性)。

依標籤移除中繼資料

出於隱私或合規需求,您可能需要從文件中移除某些中繼資料(例如作者姓名或個人資訊)。標籤使得在不同格式間定位並移除此類中繼資料變得簡單。RemoveProperties() 方法接受與前述相同的謂詞,會剔除所有符合條件的中繼資料項目。

步驟

  1. 將檔案載入 Metadata 物件。
  2. 呼叫 RemoveProperties(),傳入基於標籤的謂詞以識別要移除的屬性。
  3. 檢視方法回傳的已移除屬性數量。
  4. 儲存檔案以套用變更。
using (Metadata metadata = new Metadata("source.docx"))
{
    // Remove properties that are tagged as Creator or Editor, or any string containing "John"
    int removedCount = metadata.RemoveProperties(p =>
        p.Tags.Contains(Tags.Person.Creator) ||
        p.Tags.Contains(Tags.Person.Editor) ||
        (p.Value.Type == MetadataPropertyType.String && p.Value.ToString().Contains("John"))
    );

    Console.WriteLine("Properties removed: " + removedCount);
    metadata.Save("cleaned.docx");
}

此謂詞結合了多項條件:任何被標記為 Creator 或 Editor(皆屬於人物類別)的屬性都會被移除,此外,值為字串且包含「John」的中繼資料也會被剔除。在實務情境中,您可以利用此類邏輯清理文件中的個人資料(例如作者名稱或客戶名稱)。

結論

本文示範了 GroupDocs.Metadata for .NET 的標籤功能如何讓您在多種文件類型間,以統一的方式新增、複製、查找、更新與移除中繼資料。透過 Content、Person、Time 等標籤,您可以建立依一致中繼資料組織檔案的工作流程,提升可搜尋性(例如依作者或日期找到所有文件),並自動化文件分類或清理作業。

另請參閱

取得免費試用

您可從 releases.groupdocs.com 下載 GroupDocs.Metadata for .NET 的免費試用版。亦可前往 此處 取得臨時授權,以 unrestricted 方式體驗所有功能與特性。