GroupDocs.Conversion dla .NET v26.6 jest już dostępny. To wydanie dodaje bogatsze wsparcie zdarzeń konwersji, obsługę własnych obrazów przy konwersji PDF‑do‑Markdown, automatyczne wykrywanie RTL dla DOCX oraz wiele poprawek stabilności.
Co nowego w tym wydaniu
| Klucz | Kategoria | Podsumowanie |
|---|---|---|
| CONVERSIONNET-7934 | Feature | PDF do Markdown: umożliwienie własnego wyodrębniania obrazów i wstawiania symboli zastępczych |
| CONVERSIONNET-8286 | Feature | Wprowadzenie agregatora ConversionEvents z priorytetem obsługi per‑call/global |
| CONVERSIONNET-8314 | Feature | Dodanie zdarzenia konwersji OnFontSubstituted |
| CONVERSIONNET-8263 | Improvement | Rozdzielenie pakietu NuGet |
| CONVERSIONNET-8280 | Improvement | Automatyczne wykrywanie kierunku RTL dla DOCX z brakującym/niepoprawnym oznaczeniem bidi |
| CONVERSIONNET-8325 | Improvement | Konwersje arkuszy kalkulacyjnych do PDF z opcją SkipEmptyRowsAndColumns nakładają tekst, gdy arkusz zawiera kontrolki formularza |
| CONVERSIONNET-7912 | Bug | Uszkodzone znaki w wyjściu JPEG/TIFF |
| CONVERSIONNET-8281 | Bug | Konwersja konkretnego XFA PDF do obrazu zawiesza się i nie generuje wyniku |
| CONVERSIONNET-8321 | Bug | Problem przy konwersji publisher – Unable to load Aspose.PDF |
Zmiany w publicznym API
⚠️ Zmiany łamiące kompatybilność
- Nazwy zdarzeń zostały zmienione, a model agregacji zdarzeń uległ zmianie. Istniejące właściwości zdarzeń per‑result oraz metody łańcuchowe fluent są przestarzałe i zostaną usunięte w wersji v26.9.
ConverterSettings.Listeneroraz interfejsIConverterListenersą przestarzałe; zostały zastąpione zdarzeniami cyklu życia wConversionEvents.- Stare zdarzenie per‑document
OnConversionCompletedzostało przemianowane naOnDocumentConverted. Ta sama nazwa jest teraz używana dla zdarzenia cyklu życia pipeline, które wywoływane jest raz na koniec przebiegu konwersji.
1. Nowe zdarzenie podstawiania czcionki
| API | Opis |
|---|---|
ConversionEvents.OnFontSubstituted |
Wywoływane, gdy czcionka wymagana przez dokument źródłowy jest nieobecna i zostaje użyta substytucja (automatyczna lub zdefiniowana przez użytkownika). |
FontSubstitutionContext |
Dostarcza szczegóły dotyczące substytucji: SourceFileName, OriginalFontName, SubstituteFontName, Reason. |
FontSubstitute |
Reprezentuje regułę podstawiania dostarczoną przez użytkownika (np. FontSubstitute.Create("MissingFont", "Arial")). |
Referencje:
Przykład klasycznego 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());
Przykład 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();
Przykład reguły podstawiania (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());