GroupDocs.Conversion برای .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 بهبود تبدیل Spreadsheet به PDF با SkipEmptyRowsAndColumns متن همپوشانی می‌کند وقتی شیت دارای فرم‌کنترل باشد
CONVERSIONNET-7912 خطا کاراکترهای خراب در خروجی JPEG/TIFF
CONVERSIONNET-8281 خطا تبدیل یک XFA PDF خاص به تصویر متوقف می‌شود و هیچ نتیجه‌ای تولید نمی‌کند
CONVERSIONNET-8321 خطا مشکل در تبدیل publisher - عدم توانایی بارگذاری Aspose.PDF

تغییرات API عمومی

⚠️ تغییرات ناسازگار

  • نام‌های رویداد تغییر نام داده‌اند و مدل تجمیع رویدادها نیز تغییر کرده است. ویژگی‌های رویداد per‑result موجود و متدهای زنجیره‌ای fluent منسوخ شده‌اند و در نسخه 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());

2. رویداد یکپارچه‌شده