Categories: PDF 프로그래밍

HotPDF 컴포넌트 Delphi TextOut 샘플

HotPDF 컴포넌트 Delphi TextOut 샘플 – 폰트 스타일링 및 문자셋

이 포괄적인 HotPDF 컴포넌트 TextOut 샘플은 고급 폰트 처리, 문자셋 지원, 텍스트 스케일링, 간격 조정 및 렌더링 모드를 시연합니다. 이 샘플은 Delphi 애플리케이션에서 PDF 생성을 위한 실용적인 예제와 함께 상세한 폰트 및 문자셋 데모를 생성합니다.

시연된 주요 기능

  • 폰트 패밀리 지원: 다양한 스타일의 Arial, Times New Roman, Courier New
  • 문자셋 처리: 아랍어, 동유럽, OEM, 러시아어, 터키어 문자셋
  • 텍스트 스케일링: 수평 텍스트 압축 및 확장
  • 문자 간격: 가독성 향상을 위한 문자 간격 미세 조정
  • 단어 간격: 더 나은 텍스트 레이아웃을 위한 단어 간 공간 조정
  • 렌더링 모드: 채우기, 윤곽선, 채우기+윤곽선, 투명 텍스트 렌더링

📝 중요 참고사항

ShowCharset은 문자 코드를 통해 문자셋의 문자를 표시하는 것을 기술적으로 시연하기 위해서만 사용됩니다. 일반적인 텍스트 표시의 경우, 문자 코드를 지정할 필요 없이 TextOut을 사용하여 원하는 문자열을 직접 표시할 수 있습니다.

이 샘플의 ShowCharset 프로시저는 다양한 문자 인코딩이 유니코드/ASCII 코드로 개별 문자를 렌더링하는 방법을 보여주기 위해 특별히 설계되었습니다. 실제 애플리케이션에서는 텍스트 문자열과 함께 TextOut 메서드를 직접 사용하기만 하면 됩니다.

기술적 구현

이 샘플은 다음을 포함하여 HotPDF 컴포넌트의 포괄적인 텍스트 출력 기능을 보여줍니다:

  • 일관된 크로스 플랫폼 표시를 위한 폰트 임베딩
  • 국제 텍스트를 위한 유니코드 문자 지원
  • 고급 텍스트 위치 지정 및 회전
  • 탐색을 위한 PDF 개요/북마크 생성
  • 자동 페이지 관리를 통한 다중 페이지 문서 생성
{***************************************************************}
// HotPDF PDF 컴포넌트 - 텍스트 스타일링 및 문자셋 데모
// Copyright(c)2007-2025, https://www.loslab.com
{***************************************************************}

program TextOut;
{$APPTYPE CONSOLE}
{$I ..\..\..\Lib\HotPDF.inc}

uses
  {$IFDEF XE2+}
  WinApi.Windows,
  System.SysUtils,
  System.Classes,
  Vcl.Graphics,
  {$ELSE}
  Windows,
  SysUtils,
  Classes,
  Graphics,
  {$ENDIF}
  HPDFDoc;

// PDF 문서 및 개요 관리를 위한 전역 변수
var
  HotPDF: THotPDF; // 메인 HotPDF 컴포넌트 인스턴스
  OutlineRoot: THPDFDocOutlineObject; // 문서 탐색을 위한 루트 개요 객체
  CurrnetOutline: THPDFDocOutlineObject; // 중첩 구조를 위한 현재 개요 객체

  {
    ====================================================================
    ShowFontGroup - 다양한 스타일로 폰트 패밀리 표시
    ====================================================================

    목적:
    동일한 폰트를 다양한 스타일(일반, 굵게, 기울임, 굵게-기울임)로
    다양한 텍스트 회전 각도와 함께 표시하는 방법을 시연합니다.

    매개변수:
    @param FontGroup: String - 표시할 폰트 패밀리 이름 (예: 'Arial')
    @param Position: Integer - 텍스트 배치를 위한 X 좌표

    기능:
    1. 기본 위치에서 일반 스타일로 폰트 이름 표시
    2. 양의 회전(+1도)으로 굵은 버전 표시
    3. 음의 회전(-1도)으로 기울임 버전 표시
    4. 일반 방향으로 굵게-기울임 조합 표시

    레이아웃:
    각 폰트 스타일은 이전 것보다 20픽셀 아래에 표시됩니다
  }

procedure ShowFontGroup(FontGroup: AnsiString; Position: Integer);
begin
  // procedure SetFont ( FontName: AnsiString; FontStyle: TFontStyles; ASize: Single; FontCharset: TFontCharset; IsVertiacal: Boolean);
  // 일반 폰트 스타일 표시
  HotPDF.CurrentPage.SetFont(FontGroup, [], 12); // 스타일 수정자 없이 폰트 설정
  // procedure TextOut ( X, Y: Single; Angle: Extended; Text: WideString);
  HotPDF.CurrentPage.TextOut(Position, 70, 0, WideString(FontGroup)); // 기본 Y 위치(70)에 표시

  // 약간의 양의 회전으로 굵은 폰트 스타일 표시
  HotPDF.CurrentPage.SetFont(FontGroup, [fsBold], 12); // 굵은 스타일 적용
  HotPDF.CurrentPage.TextOut(Position, 90, 1, WideString(FontGroup + '-Bold')); // +1도 회전, Y+20

  // 약간의 음의 회전으로 기울임 폰트 스타일 표시
  HotPDF.CurrentPage.SetFont(FontGroup, [fsItalic], 12); // 기울임 스타일 적용
  HotPDF.CurrentPage.TextOut(Position, 110, - 1, WideString(FontGroup + '-Italic')); // -1도 회전, Y+40

  // 회전 없이 굵게-기울임 조합 표시
  HotPDF.CurrentPage.SetFont(FontGroup, [fsBold, fsItalic], 12); // 굵게와 기울임 모두 적용
  HotPDF.CurrentPage.TextOut(Position, 130, 0, WideString(FontGroup + '-Bold-Italic')); // 일반 방향, Y+60
end;

{
  ====================================================================
  ShowCharset - 특정 문자셋의 문자 표시
  ====================================================================

  목적:
  다양한 문자 인코딩에 대한 적절한 문자 표시를 시연합니다

  매개변수:
  @param FontCharset: TFontCharset - Windows 문자셋 식별자
  @param First: Integer - 시작 유니코드/ASCII 문자 코드
  @param Last: Integer - 끝 유니코드/ASCII 문자 코드 (포함)
  @param Y1: Integer - 문자셋 이름 표시를 위한 Y 좌표
  @param Y2: Integer - 문자 그리드 표시를 위한 Y 좌표

  문자 범위:
  각 문자셋은 특정 유니코드/ASCII 범위의 문자를 표시합니다:

  - ARABIC_CHARSET: 유니코드 1536-1625 (아랍어 블록 문자)
  - EASTEUROPE_CHARSET: 유니코드 160-249 (Latin-1 보충)
  - OEM_CHARSET: ASCII 32-121 (인쇄 가능한 ASCII 문자)
  - RUSSIAN_CHARSET: 유니코드 1024-1113 (키릴 문자 블록)
  - TURKISH_CHARSET: 유니코드 161-255 (인쇄 가능한 Latin 확장)

  표시 레이아웃:
  문자는 행당 30문자씩 3행으로 배열됩니다:
  - 1행: 문자 0-29, X=50에서 시작
  - 2행: 문자 30-59, X=50에서 시작, Y+20
  - 3행: 문자 60-89, X=50에서 시작, Y+40
  - 문자 간격: 수평 16픽셀, 수직 20픽셀
}

procedure ShowCharset(FontCharset: TFontCharset; First, Last: Integer; Y1, Y2: Integer);
var
  i: Integer; // 문자 반복을 위한 루프 카운터
  CSName: AnsiString; // 표시를 위한 문자셋 이름
  XPos, YPos: Integer; // 위치 변수
  CharCode: Integer; // 표시할 문자 코드
  CharCount: Integer; // 표시할 문자 수
  Row: Integer; // 현재 행 (1, 2, 또는 3)
  CharInRow: Integer; // 현재 행 내 문자 위치
begin
  // 설명적 이름을 가진 문자셋 구성
  case FontCharset of
    ARABIC_CHARSET: CSName := 'ARABIC_CHARSET';
    EASTEUROPE_CHARSET: CSName := 'EASTEUROPE_CHARSET';
    OEM_CHARSET: CSName := 'OEM_CHARSET';
    RUSSIAN_CHARSET: CSName := 'RUSSIAN_CHARSET';
    TURKISH_CHARSET: CSName := 'TURKISH_CHARSET';
    else CSName := 'DEFAULT_CHARSET';
  end;

  // 90문자 표시하도록 문자 수 설정 (행당 30문자 × 3행)
  CharCount := 90;
  if Last - First + 1 < CharCount then CharCount := Last - First + 1;

  // 문자셋 헤더 표시
  HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsItalic], 12);
  HotPDF.CurrentPage.TextOut(50, Y1, 0, WideString(CSName + ' example: '));

  // 문자셋 사양과 함께 문자 표시를 위한 적절한 폰트 설정
  HotPDF.CurrentPage.SetFont('Arial', [], 14, FontCharset);

  // 들여쓰기 없이 3행 레이아웃으로 문자 표시
  for i := 0 to CharCount - 1 do
  begin
    // 행과 행 내 위치 결정
    if i < 30 then
    begin
      // 첫 번째 행: 30문자, 제목과 정렬 (x=50)
      Row := 1;
      CharInRow := i;
      XPos := 50 + CharInRow * 16;
      YPos := Y2;
    end else if i < 60 then
    begin
      // 두 번째 행: 30문자, 제목과 정렬 (x=50)
      Row := 2;
      CharInRow := i - 30;
      XPos := 50 + CharInRow * 16;
      YPos := Y2 + 20; // 첫 번째 행 아래 20픽셀
    end
    else
    begin
      // 세 번째 행: 나머지 문자, 제목과 정렬 (x=50)
      Row := 3;
      CharInRow := i - 60;
      XPos := 50 + CharInRow * 16;
      YPos := Y2 + 40; // 첫 번째 행 아래 40픽셀
    end;

    // 문자 코드 계산
    CharCode := First + i;

    try
      // 모든 문자에 대해 WideString 변환 사용
        HotPDF.CurrentPage.TextOut(XPos, YPos, 0, WideString(WideChar(CharCode)));
    except
      // 오류가 발생하면 대체 문자 표시
        HotPDF.CurrentPage.TextOut(XPos, YPos, 0, WideString('?'));
    end;
  end;
end;

{
  ====================================================================
  ShowTable - 데모 테이블 구조 그리기
  ====================================================================

  목적:
  텍스트 포맷팅 효과를 시연하기 위한 간단한 테이블 구조를 생성합니다.
  텍스트 스케일링, 문자 간격, 단어 간격 섹션에서 사용됩니다.

  매개변수:
  @param X: Integer - 왼쪽 가장자리 X 좌표
  @param Y: Integer - 위쪽 가장자리 Y 좌표

  구조:
  다음과 같이 나뉜 300x100픽셀 테이블을 생성합니다:
  - 위쪽 셀: 300x50픽셀
  - 아래쪽 셀: 300x50픽셀
  - 수직 구분선: 왼쪽 가장자리에서 130픽셀

  모든 선은 가시성을 위해 스트로크 작업으로 그려집니다
}

procedure ShowTable(X, Y: Integer);
begin
  // 위쪽 테이블 셀 그리기 (300x50 사각형)
  HotPDF.CurrentPage.Rectangle(X, Y, 300, 50);
  HotPDF.CurrentPage.Stroke;

  // 아래쪽 테이블 셀 그리기 (300x50 사각형, 50픽셀 아래로 오프셋)
  HotPDF.CurrentPage.Rectangle(X, Y + 50, 300, 50);
  HotPDF.CurrentPage.Stroke;

  // 두 셀을 통과하는 수직 구분선 그리기
  HotPDF.CurrentPage.MoveTo(X + 130, Y); // 위쪽 셀의 상단에서 시작
  HotPDF.CurrentPage.LineTo(X + 130, Y + 100); // 아래쪽 셀의 하단까지 그리기
  HotPDF.CurrentPage.Stroke;
end;

{
  ====================================================================
  메인 프로그램 실행
  ====================================================================

  이것은 모든 HotPDF 텍스트 출력 기능을 시연하는 메인 프로그램 본문입니다.
  프로그램은 섹션으로 구성되어 있으며, 각각 텍스트 처리의 특정 측면을 시연합니다:

  1. 폰트 그룹 - 다양한 폰트 패밀리와 스타일 표시
  2. 문자셋 - 문자 인코딩 처리 시연
  3. 텍스트 스케일링 - 수평 텍스트 스케일링 효과 표시
  4. 문자 간격 - 문자 간격 조정 시연
  5. 단어 간격 - 단어 간격 수정 표시
  6. 렌더링 모드 - 다양한 텍스트 렌더링 효과 표시

  각 섹션에는 적절한 헤더, 탐색 개요, 그리고 해당하는 경우
  전후 비교와 함께 실용적인 예제가 포함됩니다.
}
begin
  // HotPDF 컴포넌트 초기화
  HotPDF := THotPDF.Create(nil);
  try
    // 최적의 텍스트 표시를 위한 PDF 문서 속성 구성
    HotPDF.AutoLaunch := true; // 생성 후 PDF 자동 열기
    HotPDF.FontEmbedding := true; // 시스템 간 일관된 문자 표시를 위한 폰트 임베딩 활성화
    HotPDF.StandardFontEmulation := false; // 문자 매핑 문제를 방지하기 위해 폰트 에뮬레이션 비활성화
    HotPDF.FileName := 'TextOut.pdf'; // 출력 파일명 설정
    HotPDF.PageLayout := plOneColumn; // 뷰어가 한 열을 표시하도록 구성

    // PDF 문서 생성 시작
    HotPDF.BeginDoc(true); // 압축이 활성화된 PDF 생성
    OutlineRoot := HotPDF.OutlineRoot; // 문서 개요 탐색 초기화

    // ====================================================================
    // 섹션 1: 폰트 그룹 시연
    // ====================================================================
    // 이 섹션은 다양한 폰트 패밀리가 다양한 스타일 조합
    // (일반, 굵게, 기울임, 굵게-기울임)으로 어떻게 나타나는지 시연합니다

    // 향상된 포맷팅으로 섹션 헤더 생성
    HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20);
    HotPDF.CurrentPage.TextOut(195, 30, 0, WideString('폰트 표시'));

    // 이 섹션에 대한 탐색 개요 항목 추가
    OutlineRoot.AddChild('폰트 표시', 195, 30); // 좌표에 링크

    // 시스템 전반에서 일반적으로 사용 가능한 세 가지 주요 폰트 패밀리 표시
    ShowFontGroup('Arial', 50); // X=50에서 산세리프 폰트
    ShowFontGroup('Times New Roman', 180); // X=180에서 세리프 폰트
    ShowFontGroup('Courier New', 350); // X=350에서 고정폭 폰트

    // ====================================================================
    // 섹션 2: 문자셋 시연
    // ====================================================================
    // 이 섹션은 다양한 Windows 문자 인코딩의 적절한 처리를 시연합니다

    // 섹션 헤더 생성
    HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20);
    HotPDF.CurrentPage.TextOut(200, 170, 0, WideString('문자셋'));

    // 확장 가능한 구조로 문자셋에 대한 개요 그룹 생성
    // OutlineRoot.AddChild: PDF 탐색 트리에 새 북마크/개요 항목 생성
    // 매개변수: ('제목', X좌표, Y좌표)
    // - '문자셋': PDF 개요/북마크 패널에 표시되는 표시 텍스트
    // - 250: 클릭 시 탐색할 X좌표 (수평 위치)
    // - 170: 클릭 시 탐색할 Y좌표 (수직 위치)
    CurrnetOutline := OutlineRoot.AddChild('문자셋', 250, 170);
    CurrnetOutline.Opened := true; // 기본적으로 이 개요 섹션 확장

    CurrnetOutline.AddChild('ARABIC_CHARSET', 50, 225);
    // 아랍어 문자셋: 유니코드 범위 U+0600-U+0659 (90문자)
    // 범위: 1536-1625 (문자, 구두점, 숫자, 발음 기호를 포함한 아랍어 블록)
    // 각각 30문자씩 3행으로 90개의 아랍어 문자 표시
    // 사용 대상: 아랍어, 페르시아어, 우르두어, 파슈토어, 쿠르드어 및 기타 RTL 스크립트

    // procedure ShowCharset(FontCharset: TFontCharset; First, Last: Integer; Y1, Y2: Integer);
    // First는 첫 번째 문자의 코드이며, Last 문자까지 순차적으로 출력
    // Y1은 제목 Y 좌표이고, Y2는 시작 문자 Y 좌표
    ShowCharset(ARABIC_CHARSET, 1536, 1625, 225, 250);

    CurrnetOutline.AddChild('EASTEUROPE_CHARSET', 50, 325);
    // 동유럽 문자셋: 유니코드 범위 U+00A0-U+00F9 (90문자)
    // 범위: 160-249 (악센트 문자와 기호가 있는 Latin-1 보충)
    // 각각 30문자씩 3행으로 90개의 확장 라틴 문자 표시
    // 사용 대상: 프랑스어, 독일어, 스페인어, 포르투갈어, 이탈리아어, 네덜란드어, 북유럽 언어

    // ShowCharset은 문자 코드를 통해 문자셋의 문자 표시를 시연하기 위한 것입니다
    // 일반적인 텍스트 표시의 경우, TextOut을 사용하여 필요한 문자열을 직접 표시하기만 하면 됩니다
    ShowCharset(EASTEUROPE_CHARSET, 160, 249, 325, 350);

    CurrnetOutline.AddChild('OEM_CHARSET', 50, 425);
    // OEM 문자셋: ASCII 범위 32-121 (90문자)
    // 범위: 32-121 (공백, 기호, 숫자, 문자를 포함한 인쇄 가능한 ASCII)
    // 각각 30문자씩 3행으로 90개의 ASCII 문자 표시
    // 사용 대상: DOS 애플리케이션, 콘솔 출력, 레거시 시스템
    ShowCharset(OEM_CHARSET, 32, 121, 425, 450);

    CurrnetOutline.AddChild('RUSSIAN_CHARSET', 50, 525);
    // 러시아어 문자셋: 유니코드 범위 U+0400-U+0459 (90문자)
    // 범위: 1024-1113 (러시아어, 우크라이나어, 불가리아어 문자를 포함한 키릴 문자 블록)
    // 각각 30문자씩 3행으로 90개의 키릴 문자 표시
    // 사용 대상: 러시아어, 불가리아어, 세르비아어(키릴 문자), 마케도니아어, 우크라이나어, 벨라루스어
    ShowCharset(RUSSIAN_CHARSET, 1024, 1113, 525, 550);

    CurrnetOutline.AddChild('TURKISH_CHARSET', 50, 625);
    // 터키어 문자셋: 유니코드 범위 U+00A1-U+00FF (95문자)
    // 범위: 161-255 (제어 문자 128-160을 피한 인쇄 가능한 Latin-1 보충)
    // 각각 30문자씩 3행으로 90문자 표시 (95개 중 처음 90개)
    // 터키어 특수 문자 포함: Ç(199), ç(231), Ğ(208), ğ(240), İ(221), ı(253), Ö(214), ö(246), Ş(222), ş(254), Ü(220), ü(252)
    // 사용 대상: 고유 문자와 유럽 기호가 있는 터키어
    ShowCharset(TURKISH_CHARSET, 161, 255, 625, 650);

    // ====================================================================
    // 섹션 3: 텍스트 스케일링 시연
    // ====================================================================
    // 이 섹션은 수평 텍스트 스케일링이 텍스트 모양에 미치는 영향을 보여줍니다
    // 스케일링은 높이를 유지하면서 문자의 너비를 수정합니다

    // 고급 텍스트 포맷팅 시연을 위한 새 페이지 시작
    HotPDF.AddPage;

    HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20);
    OutlineRoot.AddChild('수평 텍스트 스케일링', 180, 40); // 메인 개요 탐색에 추가
    HotPDF.CurrentPage.TextOut(180, 40, 0, WideString('수평 텍스트 스케일링'));

    // 비교 테이블 구조 생성
    ShowTable(130, 80);

    // 비교를 위한 설명 레이블 추가
    HotPDF.CurrentPage.SetFont('Times New Roman', [], 12);
    HotPDF.CurrentPage.TextOut(160, 100, 0, WideString('기본값 100')); // 일반 스케일링 레이블
    HotPDF.CurrentPage.TextOut(165, 145, 0, WideString('50으로 설정')); // 압축 스케일링 레이블

    // 일반 텍스트 스케일링 시연 (100% - 기본값)
    HotPDF.CurrentPage.SetFont('Times New Roman', [], 24);
    HotPDF.CurrentPage.TextOut(280, 95, 0, WideString('단어'));

    // 압축된 텍스트 스케일링 시연 (50% 너비)
    HotPDF.CurrentPage.SetHorizontalScaling(50); // 텍스트를 50% 너비로 압축
    HotPDF.CurrentPage.TextOut(285, 140, 0, WideString('단어'));
    HotPDF.CurrentPage.SetHorizontalScaling(100); // 일반 스케일링으로 재설정

    // ====================================================================
    // 섹션 4: 문자 간격 시연
    // ====================================================================
    // 이 섹션은 문자 간격이 텍스트 가독성에 미치는 영향을 시연합니다
    // 문자 간격은 개별 문자 사이에 균일한 공간을 추가합니다

    HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20);
    OutlineRoot.AddChild('문자 간격', 200, 220);
    HotPDF.CurrentPage.TextOut(200, 220, 0, WideString('문자 간격'));

    // 비교 테이블 생성
    ShowTable(130, 260);

    // 설명 레이블 추가
    HotPDF.CurrentPage.SetFont('Times New Roman', [], 12);
    HotPDF.CurrentPage.TextOut(162, 280, 0, WideString('기본값 0')); // 일반 간격 레이블
    HotPDF.CurrentPage.TextOut(162, 330, 0, WideString('간격 5로 설정')); // 확장 간격 레이블

    // 일반 문자 간격 시연 (0 - 기본값)
    HotPDF.CurrentPage.SetFont('Times New Roman', [], 24);
    HotPDF.CurrentPage.TextOut(278, 275, 0, WideString('문자'));

    // 확장된 문자 간격 시연 (문자 사이에 +5 단위)
    HotPDF.CurrentPage.SetCharacterSpacing(5); // 각 문자 사이에 5 단위 추가
    HotPDF.CurrentPage.TextOut(278, 320, 0, WideString('문자'));
    HotPDF.CurrentPage.SetCharacterSpacing(0); // 일반 간격으로 재설정

    // ====================================================================
    // 섹션 5: 단어 간격 시연
    // ====================================================================
    // 이 섹션은 단어 간격이 텍스트 레이아웃에 미치는 영향을 시연합니다
    // 단어 간격은 단어 사이(공백 문자에서)에 특별히 공간을 추가합니다

    HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20);
    OutlineRoot.AddChild('단어 간격', 200, 380);
    HotPDF.CurrentPage.TextOut(200, 380, 0, WideString('단어 간격'));

    // 비교 테이블 생성
    ShowTable(130, 420);

    // 설명 레이블 추가
    HotPDF.CurrentPage.SetFont('Times New Roman', [], 12);
    HotPDF.CurrentPage.TextOut(162, 440, 0, WideString('기본값 0')); // 일반 단어 간격 레이블
    HotPDF.CurrentPage.TextOut(162, 490, 0, WideString('간격 10으로 설정')); // 확장 단어 간격 레이블

    // 일반 단어 간격 시연 (0 - 기본값)
    HotPDF.CurrentPage.SetFont('Times New Roman', [], 24);
    HotPDF.CurrentPage.TextOut(280, 430, 0, WideString('단어 간격'));

    // 확장된 단어 간격 시연 (단어 사이에 +10 단위)
    HotPDF.CurrentPage.SetWordSpacing(10); // 단어 사이에 10 단위 추가
    HotPDF.CurrentPage.TextOut(280, 480, 0, WideString('단어 간격'));
    HotPDF.CurrentPage.SetWordSpacing(0); // 일반 간격으로 재설정

    // ====================================================================
    // 섹션 6: 텍스트 렌더링 모드 시연
    // ====================================================================
    // 이 섹션은 PDF에서 사용 가능한 다양한 텍스트 렌더링 효과를 시연합니다
    // 텍스트는 채우기, 윤곽선, 둘 다, 또는 투명(고급 효과용)으로 설정할 수 있습니다

    HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20);
    OutlineRoot.AddChild('렌더링 모드', 200, 550);
    HotPDF.CurrentPage.TextOut(200, 550, 0, WideString('렌더링 모드'));

    // 렌더링 모드 비교를 위한 복잡한 테이블 구조 생성
    // 메인 테이블 윤곽선 (500x150픽셀)
    HotPDF.CurrentPage.Rectangle(50, 600, 500, 150);
    HotPDF.CurrentPage.Stroke;

    // 동일한 너비의 4개 열을 만드는 수직 구분선
    HotPDF.CurrentPage.MoveTo(175, 600); // 첫 번째 구분선
    HotPDF.CurrentPage.LineTo(175, 750);
    HotPDF.CurrentPage.Stroke;

    HotPDF.CurrentPage.MoveTo(300, 600); // 두 번째 구분선
    HotPDF.CurrentPage.LineTo(300, 750);
    HotPDF.CurrentPage.Stroke;

    HotPDF.CurrentPage.MoveTo(425, 600); // 세 번째 구분선
    HotPDF.CurrentPage.LineTo(425, 750);
    HotPDF.CurrentPage.Stroke;

    // 헤더를 내용에서 분리하는 수평 구분선
    HotPDF.CurrentPage.MoveTo(50, 665);
    HotPDF.CurrentPage.LineTo(550, 665);
    HotPDF.CurrentPage.Stroke;

    // 각 렌더링 모드를 설명하는 열 헤더 추가
    HotPDF.CurrentPage.SetFont('Arial', [], 12);
    HotPDF.CurrentPage.TextOut(100, 620, 0, WideString('채우기')); // 채우기 모드 - 단색 텍스트
    HotPDF.CurrentPage.TextOut(215, 620, 0, WideString('윤곽선')); // 윤곽선 모드 - 외곽선 텍스트
    HotPDF.CurrentPage.TextOut(320, 620, 0, WideString('채우기 윤곽선')); // 결합 모드 - 외곽선이 있는 채우기
    HotPDF.CurrentPage.TextOut(465, 620, 0, WideString('투명')); // 투명 모드 - 특수 효과용

    // 극적인 렌더링 효과 시연을 위한 색상 구성
    HotPDF.CurrentPage.SetFont('Arial', [fsBold], 72); // 명확한 가시성을 위한 큰 폰트
    HotPDF.CurrentPage.SetRGBStrokeColor(clRed); // 빨간색 윤곽선 색상
    HotPDF.CurrentPage.SetRGBFillColor(clYellow); // 노란색 채우기 색상

    // 채우기 렌더링 모드 시연 - 단색 텍스트
    HotPDF.CurrentPage.SetTextRenderingMode(trFill);
    HotPDF.CurrentPage.TextOut(90, 670, 0, WideString('P'));

    // 윤곽선 렌더링 모드 시연 - 윤곽선만 있는 텍스트
    HotPDF.CurrentPage.SetTextRenderingMode(trStroke);
    HotPDF.CurrentPage.TextOut(215, 670, 0, WideString('D'));

    // 채우기+윤곽선 렌더링 모드 시연 - 색상 윤곽선이 있는 채워진 텍스트
    HotPDF.CurrentPage.SetTextRenderingMode(trFillThenStroke);
    HotPDF.CurrentPage.TextOut(340, 670, 0, WideString('F'));

    // 투명 렌더링 모드 시연 - 텍스트는 존재하지만 보이지 않음
    // (이미지 위의 검색 가능한 텍스트 또는 고급 레이아웃 기법에 유용)
    HotPDF.CurrentPage.SetTextRenderingMode(trInvisible);
    HotPDF.CurrentPage.TextOut(475, 670, 0, WideString('X'));

    // 후속 텍스트를 위해 기본 렌더링 모드로 재설정
    HotPDF.CurrentPage.SetTextRenderingMode(trFillThenStroke);

    // PDF 문서 완료 및 저장
    HotPDF.EndDoc;

  finally
    // HotPDF 컴포넌트의 적절한 정리 보장
    HotPDF.Free;
  end;
end.
losLab

Devoted to developing PDF and Spreadsheet developer library, including PDF creation, PDF manipulation, PDF rendering library, and Excel Spreadsheet creation & manipulation library.

Recent Posts

HotPDF Delphi组件:在PDF文档中创建垂直文本布局

HotPDF Delphi组件:在PDF文档中创建垂直文本布局 本综合指南演示了HotPDF组件如何让开发者轻松在PDF文档中生成Unicode垂直文本。 理解垂直排版(縦書き/세로쓰기/竖排) 垂直排版,也称为垂直书写,中文称为縱書,日文称为tategaki(縦書き),是一种起源于2000多年前古代中国的传统文本布局方法。这种书写系统从上到下、从右到左流动,创造出具有深厚文化意义的独特视觉外观。 历史和文化背景 垂直书写系统在东亚文学和文献中发挥了重要作用: 中国:传统中文文本、古典诗歌和书法主要使用垂直布局。现代简体中文主要使用横向书写,但垂直文本在艺术和仪式场合仍然常见。 日本:日语保持垂直(縦書き/tategaki)和水平(横書き/yokogaki)两种书写系统。垂直文本仍广泛用于小说、漫画、报纸和传统文档。 韩国:历史上使用垂直书写(세로쓰기),但现代韩语(한글)主要使用水平布局。垂直文本出现在传统场合和艺术应用中。 越南:传统越南文本在使用汉字(Chữ Hán)书写时使用垂直布局,但随着拉丁字母的采用,这种做法已基本消失。 垂直文本的现代应用 尽管全球趋向于水平书写,垂直文本布局在几个方面仍然相关: 出版:台湾、日本和香港的传统小说、诗集和文学作品…

2 days ago

HotPDF Delphi 컴포넌트: PDF 문서에서 세로쓰기

HotPDF Delphi 컴포넌트: PDF 문서에서 세로쓰기 텍스트 레이아웃 생성 이 포괄적인 가이드는 HotPDF 컴포넌트를 사용하여…

2 days ago

HotPDF Delphiコンポーネント-PDFドキュメントでの縦書き

HotPDF Delphiコンポーネント:PDFドキュメントでの縦書きテキストレイアウトの作成 この包括的なガイドでは、HotPDFコンポーネントを使用して、開発者がPDFドキュメントでUnicode縦書きテキストを簡単に生成する方法を実演します。 縦書き組版の理解(縦書き/세로쓰기/竖排) 縦書き組版は、日本語では縦書きまたはたてがきとも呼ばれ、2000年以上前の古代中国で生まれた伝統的なテキストレイアウト方法です。この書字体系は上から下、右から左に流れ、深い文化的意義を持つ独特の視覚的外観を作り出します。 歴史的・文化的背景 縦書きシステムは東アジアの文学と文書において重要な役割を果たしてきました: 中国:伝統的な中国語テキスト、古典詩、書道では主に縦書きレイアウトが使用されていました。現代の簡体字中国語は主に横書きを使用していますが、縦書きテキストは芸術的・儀式的な文脈で一般的です。 日本:日本語は縦書き(縦書き/たてがき)と横書き(横書き/よこがき)の両方の書字体系を維持しています。縦書きテキストは小説、漫画、新聞、伝統的な文書で広く使用されています。 韓国:歴史的には縦書き(세로쓰기)を使用していましたが、現代韓国語(한글)は主に横書きレイアウトを使用しています。縦書きテキストは伝統的な文脈や芸術的応用で見られます。 ベトナム:伝統的なベトナム語テキストは漢字(Chữ Hán)で書かれた際に縦書きレイアウトを使用していましたが、この慣行はラテン文字の採用とともにほぼ消失しました。 縦書きテキストの現代的応用 横書きへの世界的な傾向にもかかわらず、縦書きテキストレイアウトはいくつかの文脈で関連性を保っています: 出版:台湾、日本、香港の伝統的な小説、詩集、文学作品…

2 days ago

Отладка проблем порядка страниц PDF: Реальный кейс-стади

Отладка проблем порядка страниц PDF: Реальный кейс-стади компонента HotPDF Опубликовано losLab | Разработка PDF |…

4 days ago

PDF 페이지 순서 문제 디버깅: HotPDF 컴포넌트 실제 사례 연구

PDF 페이지 순서 문제 디버깅: HotPDF 컴포넌트 실제 사례 연구 발행자: losLab | PDF 개발…

4 days ago

PDFページ順序問題のデバッグ:HotPDFコンポーネント実例研究

PDFページ順序問題のデバッグ:HotPDFコンポーネント実例研究 発行者:losLab | PDF開発 | Delphi PDFコンポーネント PDF操作は特にページ順序を扱う際に複雑になることがあります。最近、私たちはPDF文書構造とページインデックスに関する重要な洞察を明らかにした魅力的なデバッグセッションに遭遇しました。このケーススタディは、一見単純な「オフバイワン」エラーがPDF仕様の深い調査に発展し、文書構造に関する根本的な誤解を明らかにした過程を示しています。 PDFページ順序の概念 - 物理的オブジェクト順序と論理的ページ順序の関係 問題 私たちはHotPDF DelphiコンポーネントのCopyPageと呼ばれるPDFページコピーユーティリティに取り組んでいました。このプログラムはデフォルトで最初のページをコピーするはずでしたが、代わりに常に2番目のページをコピーしていました。一見すると、これは単純なインデックスバグのように見えました -…

4 days ago