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.
  • Старое событие OnConversionCompleted per‑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. Унифицированное событие

// Пример кода для нового унифицированного события будет добавлен в будущих версиях документации.