GroupDocs.Conversion for .NET v26.6 现已发布。此版本增加了更丰富的转换事件支持、PDF 转 Markdown 的自定义图像处理、DOCX 的 RTL 自动检测以及多项稳定性改进。

本次发布的新增功能

关键项 类别 摘要
CONVERSIONNET-7934 Feature PDF 转 Markdown:允许自定义图像提取并插入占位符
CONVERSIONNET-8286 Feature 引入 ConversionEvents 聚合器,支持每次调用/全局处理程序的优先级
CONVERSIONNET-8314 Feature 添加 OnFontSubstituted 转换事件
CONVERSIONNET-8263 Improvement NuGet 包拆分
CONVERSIONNET-8280 Improvement 自动检测缺少/错误双向标记的 DOCX 文档的 RTL 方向
CONVERSIONNET-8325 Improvement 当工作表包含表单控件时,Spreadsheet 转 PDF 时 SkipEmptyRowsAndColumns 会导致文本重叠
CONVERSIONNET-7912 Bug JPEG/TIFF 输出中出现字符损坏
CONVERSIONNET-8281 Bug 将特定 XFA PDF 转换为图像时卡死且不产生任何结果
CONVERSIONNET-8321 Bug 转换 Publisher 时出现问题 – 无法加载 Aspose.PDF

公共 API 更改

⚠️ 破坏性更改

  • 事件名称已重命名,事件聚合模型也已更改。现有的每结果事件属性和流式链式方法已 过时,将在 v26.9 中移除。
  • ConverterSettings.ListenerIConverterListener 接口已 过时;它们已被 ConversionEvents 上的生命周期事件取代。
  • 旧的 OnConversionCompleted 每文档事件已重命名为 OnDocumentConverted。同名现在用于在一次转换运行结束时触发的管道生命周期事件。

1. 新的字体替换事件

API 描述
ConversionEvents.OnFontSubstituted 当源文档所需的字体缺失且使用了替代字体(自动或通过用户自定义规则)时触发。
FontSubstitutionContext 提供替换的详细信息:SourceFileNameOriginalFontNameSubstituteFontNameReason
FontSubstitute 表示用户提供的替换规则(例如 FontSubstitute.Create("MissingFont", "Arial"))。

参考文档:

Classic API 示例

using GroupDocs.Conversion;
using GroupDocs.Conversion.Contracts;
using GroupDocs.Conversion.Options.Convert;

var events = new ConversionEvents
{
    OnFontSubstituted = ctx =>
    {
        var detail = ctx.OriginalFontName != null
            ? $"{ctx.OriginalFontName} -> {ctx.SubstituteFontName}"
            : ctx.Reason;
        Console.WriteLine($"Font substituted in '{ctx.SourceFileName}': {detail}");
    }
};

using var converter = new Converter(
    "source.docx",
    () => new ConverterSettings(),
    () => events);

converter.Convert("output.pdf", new PdfConvertOptions());

Fluent API 示例

FluentConverter
    .WithEvents(e => e.OnFontSubstituted = ctx =>
        Console.WriteLine($"Font substituted: {ctx.Reason ?? ctx.OriginalFontName}"))
    .Load("source.docx")
    .ConvertTo("output.pdf")
    .WithOptions(new PdfConvertOptions())
    .Convert();

替换规则示例(Word‑processing / Spreadsheet / PDF)

using GroupDocs.Conversion.Options.Load;

using var converter = new Converter(
    "source.docx",
    _ => new WordProcessingLoadOptions
    {
        FontSubstitutes = new List<FontSubstitute>
        {
            FontSubstitute.Create("MissingFont", "Arial")
        }
    },
    () => new ConverterSettings(),
    () => events);

converter.Convert("output.pdf", new PdfConvertOptions());

2. 统一事件