GroupDocs.Conversion untuk .NET v26.6 kini tersedia. Rilis ini menambahkan dukungan peristiwa konversi yang lebih kaya, penanganan gambar khusus untuk PDF‑ke‑Markdown, deteksi otomatis RTL untuk DOCX, dan beberapa perbaikan stabilitas.

Apa yang baru di rilis ini

Kunci Kategori Ringkasan
CONVERSIONNET-7934 Fitur PDF ke Markdown: izinkan ekstraksi gambar khusus dan penyisipan placeholder
CONVERSIONNET-8286 Fitur Perkenalkan agregator ConversionEvents dengan prioritas handler per‑panggilan/global
CONVERSIONNET-8314 Fitur Tambahkan peristiwa konversi OnFontSubstituted
CONVERSIONNET-8263 Peningkatan Pemisahan Paket NuGet
CONVERSIONNET-8280 Peningkatan Deteksi otomatis arah RTL untuk DOCX dengan markup bidi yang hilang/keliru
CONVERSIONNET-8325 Peningkatan Konversi Spreadsheet ke PDF dengan SkipEmptyRowsAndColumns menimpa teks ketika lembar memiliki kontrol formulir
CONVERSIONNET-7912 Bug Karakter rusak pada output JPEG/TIFF
CONVERSIONNET-8281 Bug Mengonversi XFA PDF tertentu ke gambar terhenti dan tidak menghasilkan hasil apa pun
CONVERSIONNET-8321 Bug Masalah mengonversi publisher - Tidak dapat memuat Aspose.PDF

Perubahan API Publik

⚠️ Perubahan yang memecah kompatibilitas

  • Nama peristiwa telah diubah dan model agregasi peristiwa berubah. Properti per‑hasil peristiwa yang ada dan metode rantai fluent usang dan akan dihapus pada v26.9.
  • ConverterSettings.Listener dan antarmuka IConverterListener usang; keduanya digantikan oleh peristiwa siklus hidup pada ConversionEvents.
  • Peristiwa lama OnConversionCompleted per‑dokumen telah diubah namanya menjadi OnDocumentConverted. Nama yang sama kini digunakan untuk peristiwa siklus‑hidup pipeline yang dipicu sekali di akhir proses konversi.

1. Peristiwa substitusi font baru

API Deskripsi
ConversionEvents.OnFontSubstituted Dipicu ketika font yang dibutuhkan oleh dokumen sumber tidak ada dan digantikan dengan font substitusi (baik secara otomatis maupun melalui aturan yang ditentukan pengguna).
FontSubstitutionContext Menyediakan detail tentang substitusi: SourceFileName, OriginalFontName, SubstituteFontName, Reason.
FontSubstitute Mewakili aturan substitusi yang disediakan pengguna (misalnya, FontSubstitute.Create("MissingFont", "Arial")).

Referensi:

Contoh API klasik

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());

Contoh API fluent

FluentConverter
    .WithEvents(e => e.OnFontSubstituted = ctx =>
        Console.WriteLine($"Font substituted: {ctx.Reason ?? ctx.OriginalFontName}"))
    .Load("source.docx")
    .ConvertTo("output.pdf")
    .WithOptions(new PdfConvertOptions())
    .Convert();

Contoh aturan substitusi (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. Peristiwa terpadu