GroupDocs.Conversion for .NET v26.6 теперь доступен. Этот релиз добавляет более расширенную поддержку событий конвертации, пользовательскую обработку изображений при преобразовании PDF‑в‑Markdown, автоматическое определение RTL для DOCX и несколько улучшений стабильности.
Что нового в этом релизе
| Ключ | Категория | Краткое описание |
|---|---|---|
| CONVERSIONNET-7934 | Функция | PDF в Markdown: возможность пользовательского извлечения изображений и вставки заполнителей |
| CONVERSIONNET-8286 | Функция | Введение агрегатора ConversionEvents с приоритетом обработчиков per‑call/global |
| CONVERSIONNET-8314 | Функция | Добавлено событие конвертации OnFontSubstituted |
| CONVERSIONNET-8263 | Улучшение | Разделение NuGet‑пакета |
| CONVERSIONNET-8280 | Улучшение | Автоматическое определение направления RTL для DOCX с отсутствующей/некорректной bidi‑разметкой |
| CONVERSIONNET-8325 | Улучшение | Преобразование электронных таблиц в PDF: при включённом SkipEmptyRowsAndColumns текст перекрывается, если лист содержит элементы управления формой |
| CONVERSIONNET-7912 | Ошибка | Искажённые символы в выводе JPEG/TIFF |
| CONVERSIONNET-8281 | Ошибка | Преобразование конкретного XFA PDF в изображение зависает и не выдаёт результат |
| CONVERSIONNET-8321 | Ошибка | Проблема при конвертации publisher – Unable to load Aspose.PDF |
Изменения в публичном API
⚠️ Критические изменения
- Имена событий были переименованы, а модель агрегации событий изменена. Существующие свойства событий per‑result и методы цепочки fluent устарели и будут удалены в версии v26.9.
ConverterSettings.Listenerи интерфейсIConverterListenerустарели; они заменены жизненными циклами событий вConversionEvents.- Старое событие
OnConversionCompletedper‑document переименовано в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());
2. Унифицированное событие
// Пример кода для нового унифицированного события будет добавлен в будущих версиях документации.