我们很高兴宣布 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 开始,默认跳过外部资源,适用于 Word 处理、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 页面下载此发布。

资源