我們很高興宣布 GroupDocs.Annotation for .NET 26.10,於 2026 年 10 月發布。此版本聚焦於安全性:文件不再自行載入遠端圖像、樣式表或連結檔案,且新的 LoadOptions 成員讓您精確決定可載入的內容。此版本同時升級了底層文件引擎,更新了易受攻擊的相依性,並修復了多項問題。

此版本的新功能

代號 類別 摘要
ANNOTATIONNET-2663 ⚠️ 增強 外部資源不再預設載入(新 LoadOptions 控制)
ANNOTATIONNET-2687 ✨ 增強 升級底層文件引擎
ANNOTATIONNET-2672 🔒 安全 將 System.Security.Cryptography.Pkcs 更新至 8.0.2(CVE-2026-84008 / CVE-2026-70162)
ANNOTATIONNET-2102 🔧 修復 修復從 EML 文件提取註釋時的 FileTypeNotSupportedException
ANNOTATIONNET-1903 🔧 修復 修復舊版註釋的文件在 .NET 8 上無法開啟
ANNOTATIONNET-2689 🔧 修復 修復 PDF 頁面旋轉 90 度在儲存時遺失

外部資源不再預設載入

文件可以引用外部資源:HTML 頁面或電子郵件正文中的 <img src="https://...">、Word 文件中的連結圖片、遠端樣式表或外部工作簿連結。在此之前,開啟、預覽或儲存此類文件會使 GroupDocs.Annotation 從網路或檔案分享中請求這些資源。

在處理不受信任文件的伺服器上,這會構成 伺服器端請求偽造 (SSRF) 風險:文件可能使伺服器呼叫內部位址,且 UNC 路徑可能洩漏執行程序的 Windows 憑證。

從 26.10 開始,外部資源預設會被跳過,適用於文字處理、HTML、電子郵件、簡報與試算表文件:

  • 不發出請求。 在任何操作(Get、Add、Save、GeneratePreview 與 GetDocumentInfo)中,對文件引用的資源不會發出網路或檔案分享請求。
  • 空白佔位符。 被跳過的圖像會以透明佔位符呈現,且原始連結會保留在儲存的文件中。
  • 嵌入內容仍可運作。 電子郵件的 cid: 部分、data: URI 以及嵌入圖片始終會被載入。
  • 圖像註釋不受影響。 ImageAnnotation.ImagePath 仍會從 URL 載入。

這是行為變更。 若您的文件依賴遠端圖像或樣式表的呈現,請使用新的 LoadOptions 成員明確允許它們:

成員 預設值 說明
SkipExternalResources true 跳過外部資源。將其設為 false 可恢復 26.10 之前的行為。
WhitelistedResources empty 即使資源被跳過,也會載入的主機名稱或絕對 URI 前綴。
ExternalResourceHandler null 對每個外部資源皆會呼叫;可允許、跳過或提供其內容。

僅允許受信任的主機(建議):

LoadOptions loadOptions = new LoadOptions
{
    // SkipExternalResources stays true (the default)
    WhitelistedResources = { "cdn.example.com", "https://intranet.example.com/images/" }
};

using (Annotator annotator = new Annotator("input.html", loadOptions))
{
    annotator.Save("output.html"); // only images from the two whitelisted locations are loaded
}

使用處理程序檢查、允許或替換每個資源:

class AuditingResourceHandler : ExternalResourceHandler
{
    public override void OnLoading(ExternalResourceLoadingArgs args)
    {
        Console.WriteLine($"{args.Uri}: {(args.Skipped ? "skipped" : "loaded")}");

        // serve a local copy instead of going to the network
        if (args.Uri == "https://example.com/logo.png")
            args.Data = File.ReadAllBytes("logo.png");
    }
}

升級的文件引擎

隨附的文字處理、試算表、簡報、PDF、圖表、電子郵件、影像、CAD 與圖形渲染引擎已更新至 2026 年 10 月的版本。重新產生的文件與頁面預覽在位元或像素層面可能略有差異,但在視覺上仍相等。

對於 .NET 6 與 .NET 8 專案,執行時套件現在依賴 SkiaSharp 4.152.1。如果您的專案直接引用 SkiaSharp 3.x,請將其更新至 4.x。

安全性更新

文件引擎引入了 System.Security.Cryptography.Pkcs 8.0.0 或 8.0.1,受到 CVE-2026-84008 與 CVE-2026-70162 的影響。GroupDocs.Annotation 現在在所有目標框架上引用已修補的 8.0.2。無需更改程式碼。

修復

  • 從串流讀取 EML。 以 MIME-Version: 1.0 開頭的 EML 訊息被誤判為 MHT 壓縮檔,從串流開啟時拋出 FileTypeNotSupportedException。此類訊息現在可從串流或檔案以相同方式開啟,且 現在支援 MHT 檔作為電子郵件文件。
  • 舊版文件在 .NET 8 上。 由 26.6 之前的版本註釋的文件在 .NET 8 上會因 NotSupportedException 無法開啟。現在已可開啟:舊版註釋會被跳過並產生日誌警告,且可新增與儲存新註釋。相關的重新儲存簡報(PPTX)註釋無法讀回的問題已在所有框架上修復。
  • PDF 旋轉 90 度。 使用 Annotator.Rotation 旋轉 PDF 頁面時,180 度與 270 度可正常工作,但 90 度的旋轉在儲存時會遺失。現在已在所有角度保留:
using (Annotator annotator = new Annotator("input.pdf"))
{
    annotator.ProcessPages = 1;                 // the page to rotate
    annotator.Rotation = RotationDocument.on90; // previously ignored
    annotator.Save("output.pdf");
}

公開 API 變更

此版本新增以下成員:

未移除或變更任何公開成員。

如何取得更新

NuGet

使用 NuGet 安裝或升級至 GroupDocs.Annotation 26.10.0。此套件會自動解析您目標框架的執行時套件(.NET Framework 4.6.2、.NET 6 或 .NET 8):

dotnet add package GroupDocs.Annotation --version 26.10.0

直接下載

從 GroupDocs.Annotation for .NET 26.10 頁面下載此版本。

資源