GroupDocs.Conversion for .NET v26.6 тепер доступний. У цьому випуску додано розширену підтримку подій конвертації, користувацьку обробку зображень для PDF‑to‑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 — Не вдається завантажити Aspose.PDF

Зміни у публічному API

⚠️ Критичні зміни

  • Назви подій були перейменовані, а модель агрегації подій змінена. Існуючі властивості подій для кожного результату та методи ланцюжка Fluent застарілі і будуть видалені у v26.9.
  • ConverterSettings.Listener та інтерфейс IConverterListener застарілі; їх замінено на події життєвого циклу в ConversionEvents.
  • Стара подія OnConversionCompleted для кожного документа була перейменована на OnDocumentConverted. Тепер таке ж ім’я використовується для події життєвого циклу конвеєра, яка спрацьовує один раз у кінці процесу конвертації.

1. Нова подія підстановки шрифтів

API Опис
ConversionEvents.OnFontSubstituted Викликається, коли шрифт, необхідний у вихідному документі, відсутній і використовується заміна (автоматично або за правилом, визначеним користувачем).
FontSubstitutionContext Надає деталі про підстановку: SourceFileName, OriginalFontName, SubstituteFontName, Reason.
FontSubstitute Представляє правило підстановки, задане користувачем (наприклад, FontSubstitute.Create("MissingFont", "Arial")).

Посилання:

Приклад класичного 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. Уніфікована подія