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.Listener和IConverterListener接口已 过时;它们已被ConversionEvents上的生命周期事件取代。- 旧的
OnConversionCompleted每文档事件已重命名为OnDocumentConverted。同名现在用于在一次转换运行结束时触发的管道生命周期事件。
1. 新的字体替换事件
| API | 描述 |
|---|---|
ConversionEvents.OnFontSubstituted |
当源文档所需的字体缺失且使用了替代字体(自动或通过用户自定义规则)时触发。 |
FontSubstitutionContext |
提供替换的详细信息:SourceFileName、OriginalFontName、SubstituteFontName、Reason。 |
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());