GroupDocs.Conversion for .NET v26.6이 이제 제공됩니다. 이번 릴리스에서는 변환 이벤트 지원이 강화되고, PDF‑to‑Markdown에 대한 사용자 지정 이미지 처리, DOCX에 대한 RTL 자동 감지, 그리고 여러 안정성 개선이 추가되었습니다.
이번 릴리스의 새로운 기능
| Key | Category | Summary |
|---|---|---|
| CONVERSIONNET-7934 | Feature | PDF to Markdown: 사용자 지정 이미지 추출 및 자리 표시자 삽입 허용 |
| CONVERSIONNET-8286 | Feature | 호출별/전역 핸들러 우선순위를 갖는 ConversionEvents 집계자 도입 |
| CONVERSIONNET-8314 | Feature | OnFontSubstituted 변환 이벤트 추가 |
| CONVERSIONNET-8263 | Improvement | NuGet 패키지 분할 |
| CONVERSIONNET-8280 | Improvement | 잘못되었거나 누락된 bidi 마크업이 있는 DOCX에 대해 RTL 방향 자동 감지 |
| CONVERSIONNET-8325 | Improvement | 시트에 폼 컨트롤이 있는 경우 SkipEmptyRowsAndColumns가 겹치는 텍스트와 함께 Spreadsheet → PDF 변환 |
| CONVERSIONNET-7912 | Bug | JPEG/TIFF 출력에서 손상된 문자 발생 |
| CONVERSIONNET-8281 | Bug | 특정 XFA PDF를 이미지로 변환할 때 중단되고 결과가 생성되지 않음 |
| CONVERSIONNET-8321 | Bug | 퍼블리셔 변환 문제 - Aspose.PDF 로드 실패 |
Public API 변경 사항
⚠️ Breaking changes
- 이벤트 이름이 변경되었으며 이벤트 집계 모델이 바뀌었습니다. 기존의 결과별 이벤트 속성 및 플루언트 체인 메서드는 obsolete이며 v26.9에서 제거될 예정입니다.
ConverterSettings.Listener와IConverterListener인터페이스는 obsolete이며,ConversionEvents의 라이프사이클 이벤트로 대체되었습니다.- 기존
OnConversionCompleted문서별 이벤트는OnDocumentConverted로 이름이 변경되었습니다. 이제 동일한 이름이 변환 실행이 끝날 때 한 번 발생하는 파이프라인‑라이프사이클 이벤트에도 사용됩니다.
1. 새로운 폰트‑대체 이벤트
| API | Description |
|---|---|
ConversionEvents.OnFontSubstituted |
소스 문서에 필요한 폰트가 없고 대체 폰트가 사용될 때(자동이든 사용자 정의 규칙이든) 발생합니다. |
FontSubstitutionContext |
대체에 대한 세부 정보를 제공합니다: SourceFileName, OriginalFontName, SubstituteFontName, Reason. |
FontSubstitute |
사용자 제공 대체 규칙을 나타냅니다(예: FontSubstitute.Create("MissingFont", "Arial")). |
Reference:
Classic API example
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 example
FluentConverter
.WithEvents(e => e.OnFontSubstituted = ctx =>
Console.WriteLine($"Font substituted: {ctx.Reason ?? ctx.OriginalFontName}"))
.Load("source.docx")
.ConvertTo("output.pdf")
.WithOptions(new PdfConvertOptions())
.Convert();
Substitution rule example (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());