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.ListenerIConverterListener 인터페이스는 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());

2. Unified event