Este exemplo abrangente do componente HotPDF TextOut demonstra o manuseio avançado de fontes, suporte a conjuntos de caracteres, dimensionamento de texto, ajustes de espaçamento e modos de renderização. O exemplo gera demonstrações detalhadas de fontes e conjuntos de caracteres com exemplos práticos para geração de PDF em aplicações Delphi.
ShowCharset é usado apenas para demonstrar tecnicamente a exibição de caracteres de um conjunto de caracteres através de códigos de caracteres. Para exibição de texto regular, você pode simplesmente usar TextOut para exibir diretamente a string desejada sem precisar especificar códigos de caracteres.
O procedimento ShowCharset neste exemplo é especificamente projetado para mostrar como diferentes codificações de caracteres renderizam caracteres individuais por seus códigos Unicode/ASCII. Em aplicações reais, simplesmente use o método TextOut com suas strings de texto diretamente.
Este exemplo demonstra as capacidades abrangentes de saída de texto do componente HotPDF, incluindo:
{***************************************************************} // Componente PDF HotPDF - Demonstração de Estilo de Texto e Conjunto de Caracteres // 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; // Variáveis globais para gerenciamento de documento PDF e estrutura var HotPDF: THotPDF; // Instância principal do componente HotPDF OutlineRoot: THPDFDocOutlineObject; // Objeto de estrutura raiz para navegação do documento CurrnetOutline: THPDFDocOutlineObject; // Objeto de estrutura atual para estrutura aninhada { ==================================================================== ShowFontGroup - Exibe uma família de fontes com diferentes estilos ==================================================================== PROPÓSITO: Demonstra como exibir a mesma fonte em diferentes estilos (normal, negrito, itálico, negrito-itálico) com vários ângulos de rotação de texto. PARÂMETROS: @param FontGroup: String - Nome da família de fontes a exibir (ex: 'Arial') @param Position: Integer - Coordenada X para posicionamento do texto FUNCIONALIDADE: 1. Exibe o nome da fonte em estilo normal na posição base 2. Mostra a versão negrito com rotação positiva (+1 grau) 3. Mostra a versão itálico com rotação negativa (-1 grau) 4. Mostra a combinação negrito-itálico em orientação normal LAYOUT: Cada estilo de fonte é exibido 20 pixels abaixo do anterior } procedure ShowFontGroup(FontGroup: AnsiString; Position: Integer); begin // procedure SetFont ( FontName: AnsiString; FontStyle: TFontStyles; ASize: Single; FontCharset: TFontCharset; IsVertiacal: Boolean); // Exibir estilo de fonte normal HotPDF.CurrentPage.SetFont(FontGroup, [], 12); // Definir fonte sem modificadores de estilo // procedure TextOut ( X, Y: Single; Angle: Extended; Text: WideString); HotPDF.CurrentPage.TextOut(Position, 70, 0, WideString(FontGroup)); // Exibir na posição Y base (70) // Exibir estilo de fonte negrito com ligeira rotação positiva HotPDF.CurrentPage.SetFont(FontGroup, [fsBold], 12); // Aplicar estilo negrito HotPDF.CurrentPage.TextOut(Position, 90, 1, WideString(FontGroup + '-Bold')); // Rotação +1 grau, Y+20 // Exibir estilo de fonte itálico com ligeira rotação negativa HotPDF.CurrentPage.SetFont(FontGroup, [fsItalic], 12); // Aplicar estilo itálico HotPDF.CurrentPage.TextOut(Position, 110, - 1, WideString(FontGroup + '-Italic')); // Rotação -1 grau, Y+40 // Exibir combinação negrito-itálico sem rotação HotPDF.CurrentPage.SetFont(FontGroup, [fsBold, fsItalic], 12); // Aplicar negrito e itálico HotPDF.CurrentPage.TextOut(Position, 130, 0, WideString(FontGroup + '-Bold-Italic')); // Orientação normal, Y+60 end; { ==================================================================== ShowCharset - Exibe caracteres para um conjunto de caracteres específico ==================================================================== PROPÓSITO: Demonstra a exibição adequada de caracteres para diferentes codificações de caracteres PARÂMETROS: @param FontCharset: TFontCharset - Identificador de conjunto de caracteres Windows @param First: Integer - Código de caractere Unicode/ASCII inicial @param Last: Integer - Código de caractere Unicode/ASCII final (inclusivo) @param Y1: Integer - Coordenada Y para exibição do nome do conjunto de caracteres @param Y2: Integer - Coordenada Y para exibição da grade de caracteres FAIXAS DE CARACTERES: Cada conjunto de caracteres exibe caracteres de faixas Unicode/ASCII específicas: - ARABIC_CHARSET: Unicode 1536-1625 (caracteres do bloco árabe) - EASTEUROPE_CHARSET: Unicode 160-249 (Suplemento Latin-1) - OEM_CHARSET: ASCII 32-121 (caracteres ASCII imprimíveis) - RUSSIAN_CHARSET: Unicode 1024-1113 (caracteres do bloco cirílico) - TURKISH_CHARSET: Unicode 161-255 (Latin estendido imprimível) LAYOUT DE EXIBIÇÃO: Os caracteres são organizados em 3 fileiras com 30 caracteres por fileira: - Fileira 1: Caracteres 0-29, começando em X=50 - Fileira 2: Caracteres 30-59, começando em X=50, Y+20 - Fileira 3: Caracteres 60-89, começando em X=50, Y+40 - Espaçamento de caracteres: 16 pixels horizontalmente, 20 pixels verticalmente } procedure ShowCharset(FontCharset: TFontCharset; First, Last: Integer; Y1, Y2: Integer); var i: Integer; // Contador de loop para iteração de caracteres CSName: AnsiString; // Nome do conjunto de caracteres para exibição XPos, YPos: Integer; // Variáveis de posição CharCode: Integer; // Código de caractere a exibir CharCount: Integer; // Número de caracteres a exibir Row: Integer; // Fileira atual (1, 2 ou 3) CharInRow: Integer; // Posição do caractere dentro da fileira atual begin // Configuração do conjunto de caracteres com nomes descritivos 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; // Definir contagem de caracteres para exibir 90 caracteres (30 por fileira × 3 fileiras) CharCount := 90; if Last - First + 1 < CharCount then CharCount := Last - First + 1; // Exibir cabeçalho do conjunto de caracteres HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsItalic], 12); HotPDF.CurrentPage.TextOut(50, Y1, 0, WideString(CSName + ' exemplo: ')); // Definir a fonte apropriada para exibição de caracteres com especificação do conjunto de caracteres HotPDF.CurrentPage.SetFont('Arial', [], 14, FontCharset); // Exibir caracteres em layout de 3 fileiras sem indentação for i := 0 to CharCount - 1 do begin // Determinar fileira e posição dentro da fileira if i < 30 then begin // Primeira fileira: 30 caracteres, alinhados com o título (x=50) Row := 1; CharInRow := i; XPos := 50 + CharInRow * 16; YPos := Y2; end else if i < 60 then begin // Segunda fileira: 30 caracteres, alinhados com o título (x=50) Row := 2; CharInRow := i - 30; XPos := 50 + CharInRow * 16; YPos := Y2 + 20; // 20 pixels abaixo da primeira fileira end else begin // Terceira fileira: caracteres restantes, alinhados com o título (x=50) Row := 3; CharInRow := i - 60; XPos := 50 + CharInRow * 16; YPos := Y2 + 40; // 40 pixels abaixo da primeira fileira end; // Calcular código do caractere CharCode := First + i; try // Usar conversão WideString para todos os caracteres HotPDF.CurrentPage.TextOut(XPos, YPos, 0, WideString(WideChar(CharCode))); except // Se ocorrer algum erro, exibir um caractere de fallback HotPDF.CurrentPage.TextOut(XPos, YPos, 0, WideString('?')); end; end; end; { ==================================================================== ShowTable - Desenha uma estrutura de tabela de demonstração ==================================================================== PROPÓSITO: Cria uma estrutura de tabela simples para demonstrar efeitos de formatação de texto. Usado nas seções de dimensionamento de texto, espaçamento de caracteres e espaçamento de palavras. PARÂMETROS: @param X: Integer - Coordenada X da borda esquerda @param Y: Integer - Coordenada Y da borda superior ESTRUTURA: Cria uma tabela de 300x100 pixels dividida em: - Célula superior: 300x50 pixels - Célula inferior: 300x50 pixels - Divisor vertical: 130 pixels da borda esquerda Todas as linhas são desenhadas com operação de contorno para visibilidade } procedure ShowTable(X, Y: Integer); begin // Desenhar célula superior da tabela (retângulo 300x50) HotPDF.CurrentPage.Rectangle(X, Y, 300, 50); HotPDF.CurrentPage.Stroke; // Desenhar célula inferior da tabela (retângulo 300x50, deslocado 50 pixels para baixo) HotPDF.CurrentPage.Rectangle(X, Y + 50, 300, 50); HotPDF.CurrentPage.Stroke; // Desenhar linha divisória vertical através de ambas as células HotPDF.CurrentPage.MoveTo(X + 130, Y); // Começar no topo da célula superior HotPDF.CurrentPage.LineTo(X + 130, Y + 100); // Desenhar até o fundo da célula inferior HotPDF.CurrentPage.Stroke; end; { ==================================================================== EXECUÇÃO DO PROGRAMA PRINCIPAL ==================================================================== Este é o corpo principal do programa que demonstra todas as capacidades de saída de texto do HotPDF. O programa é estruturado em seções, cada uma demonstrando um aspecto específico do manuseio de texto: 1. GRUPOS DE FONTES - Mostra diferentes famílias de fontes e estilos 2. CONJUNTOS DE CARACTERES - Demonstra o manuseio de codificação de caracteres 3. DIMENSIONAMENTO DE TEXTO - Mostra efeitos de dimensionamento horizontal de texto 4. ESPAÇAMENTO DE CARACTERES - Demonstra ajustes de espaçamento de caracteres 5. ESPAÇAMENTO DE PALAVRAS - Mostra modificações de espaçamento de palavras 6. MODOS DE RENDERIZAÇÃO - Exibe diferentes efeitos de renderização de texto Cada seção inclui cabeçalhos apropriados, estruturas de navegação e exemplos práticos com comparações antes/depois quando aplicável. } begin // Inicializar componente HotPDF HotPDF := THotPDF.Create(nil); try // Configurar propriedades do documento PDF para exibição ótima de texto HotPDF.AutoLaunch := true; // Abrir automaticamente o PDF após criação HotPDF.FontEmbedding := true; // Habilitar incorporação de fontes para exibição consistente de caracteres em todos os sistemas HotPDF.StandardFontEmulation := false; // Desabilitar emulação de fontes para prevenir problemas de mapeamento de caracteres HotPDF.FileName := 'TextOut.pdf'; // Definir nome do arquivo de saída HotPDF.PageLayout := plOneColumn; // Configurar visualizador para exibir uma coluna // Iniciar criação do documento PDF HotPDF.BeginDoc(true); // Criar PDF com compressão habilitada OutlineRoot := HotPDF.OutlineRoot; // Inicializar navegação da estrutura do documento // ==================================================================== // SEÇÃO 1: DEMONSTRAÇÃO DE GRUPOS DE FONTES // ==================================================================== // Esta seção demonstra como diferentes famílias de fontes aparecem com // várias combinações de estilos (normal, negrito, itálico, negrito-itálico) // Criar cabeçalho de seção com formatação aprimorada HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20); HotPDF.CurrentPage.TextOut(195, 30, 0, WideString('Mostrar Fontes')); // Adicionar entrada de estrutura de navegação para esta seção OutlineRoot.AddChild('Mostrar Fontes', 195, 30); // Links para coordenadas // Exibir três principais famílias de fontes comumente disponíveis em todos os sistemas ShowFontGroup('Arial', 50); // Fonte sans-serif em X=50 ShowFontGroup('Times New Roman', 180); // Fonte serif em X=180 ShowFontGroup('Courier New', 350); // Fonte monoespaçada em X=350 // ==================================================================== // SEÇÃO 2: DEMONSTRAÇÃO DE CONJUNTOS DE CARACTERES // ==================================================================== // Esta seção demonstra o manuseio adequado de diferentes codificações de caracteres Windows // Criar cabeçalho de seção HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20); HotPDF.CurrentPage.TextOut(200, 170, 0, WideString('Conjuntos de Caracteres')); // Criar grupo de estrutura para conjuntos de caracteres com estrutura expansível // OutlineRoot.AddChild: Cria uma nova entrada de marcador/estrutura na árvore de navegação PDF // Parâmetros: ('Título', coordenada-X, coordenada-Y) // - 'Conjuntos de Caracteres': Texto de exibição mostrado no painel de estrutura/marcador PDF // - 250: Coordenada X (posição horizontal) para onde o clique navegará // - 170: Coordenada Y (posição vertical) para onde o clique navegará CurrnetOutline := OutlineRoot.AddChild('Conjuntos de Caracteres', 250, 170); CurrnetOutline.Opened := true; // Expandir esta seção de estrutura por padrão CurrnetOutline.AddChild('ARABIC_CHARSET', 50, 225); // Conjunto de caracteres árabe: faixa Unicode U+0600-U+0659 (90 caracteres) // Faixa: 1536-1625 (bloco árabe incluindo letras, pontuação, números e diacríticos) // Exibe 90 caracteres árabes em 3 fileiras de 30 caracteres cada // Usado para: árabe, persa, urdu, pashto, curdo e outros scripts RTL // procedure ShowCharset(FontCharset: TFontCharset; First, Last: Integer; Y1, Y2: Integer); // First é o código do primeiro caractere, saída sequencial até o último caractere // Y1 é a coordenada Y do título, e Y2 é a coordenada Y inicial dos caracteres ShowCharset(ARABIC_CHARSET, 1536, 1625, 225, 250); CurrnetOutline.AddChild('EASTEUROPE_CHARSET', 50, 325); // Conjunto de caracteres europeu oriental: faixa Unicode U+00A0-U+00F9 (90 caracteres) // Faixa: 160-249 (Suplemento Latin-1 com caracteres acentuados e símbolos) // Exibe 90 caracteres latinos estendidos em 3 fileiras de 30 caracteres cada // Usado para: francês, alemão, espanhol, português, italiano, holandês, idiomas nórdicos // ShowCharset é apenas para demonstrar a exibição de caracteres do conjunto de caracteres através de códigos de caracteres // para exibição de texto regular, você só precisa usar TextOut para mostrar diretamente a string necessária ShowCharset(EASTEUROPE_CHARSET, 160, 249, 325, 350); CurrnetOutline.AddChild('OEM_CHARSET', 50, 425); // Conjunto de caracteres OEM: faixa ASCII 32-121 (90 caracteres) // Faixa: 32-121 (ASCII imprimível incluindo espaço, símbolos, números e letras) // Exibe 90 caracteres ASCII em 3 fileiras de 30 caracteres cada // Usado para: aplicações DOS, saída de console, sistemas legados ShowCharset(OEM_CHARSET, 32, 121, 425, 450); CurrnetOutline.AddChild('RUSSIAN_CHARSET', 50, 525); // Conjunto de caracteres russo: faixa Unicode U+0400-U+0459 (90 caracteres) // Faixa: 1024-1113 (bloco cirílico incluindo letras russas, ucranianas, búlgaras) // Exibe 90 caracteres cirílicos em 3 fileiras de 30 caracteres cada // Usado para: russo, búlgaro, sérvio (cirílico), macedônio, ucraniano, bielorrusso ShowCharset(RUSSIAN_CHARSET, 1024, 1113, 525, 550); CurrnetOutline.AddChild('TURKISH_CHARSET', 50, 625); // Conjunto de caracteres turco: faixa Unicode U+00A1-U+00FF (95 caracteres) // Faixa: 161-255 (Suplemento Latin-1 imprimível, evitando caracteres de controle 128-160) // Exibe 90 caracteres em 3 fileiras de 30 caracteres cada (primeiros 90 dos 95 disponíveis) // Inclui especiais turcos: Ç(199), ç(231), Ğ(208), ğ(240), İ(221), ı(253), Ö(214), ö(246), Ş(222), ş(254), Ü(220), ü(252) // Usado para: idioma turco com seus caracteres únicos e símbolos europeus ShowCharset(TURKISH_CHARSET, 161, 255, 625, 650); // ==================================================================== // SEÇÃO 3: DEMONSTRAÇÃO DE DIMENSIONAMENTO DE TEXTO // ==================================================================== // Esta seção mostra como o dimensionamento horizontal de texto afeta a aparência do texto // O dimensionamento modifica a largura dos caracteres mantendo a altura // Iniciar nova página para demonstrações de formatação avançada de texto HotPDF.AddPage; HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20); OutlineRoot.AddChild('Dimensionamento horizontal de texto', 180, 40); // Adicionar à navegação da estrutura principal HotPDF.CurrentPage.TextOut(180, 40, 0, WideString('Dimensionamento horizontal de texto')); // Criar estrutura de tabela de comparação ShowTable(130, 80); // Adicionar rótulos descritivos para a comparação HotPDF.CurrentPage.SetFont('Times New Roman', [], 12); HotPDF.CurrentPage.TextOut(160, 100, 0, WideString('padrão 100')); // Rótulo de dimensionamento normal HotPDF.CurrentPage.TextOut(165, 145, 0, WideString('definido para 50')); // Rótulo de dimensionamento comprimido // Demonstrar dimensionamento normal de texto (100% - padrão) HotPDF.CurrentPage.SetFont('Times New Roman', [], 24); HotPDF.CurrentPage.TextOut(280, 95, 0, WideString('Palavra')); // Demonstrar dimensionamento comprimido de texto (50% de largura) HotPDF.CurrentPage.SetHorizontalScaling(50); // Comprimir texto para 50% de largura HotPDF.CurrentPage.TextOut(285, 140, 0, WideString('Palavra')); HotPDF.CurrentPage.SetHorizontalScaling(100); // Redefinir para dimensionamento normal // ==================================================================== // SEÇÃO 4: DEMONSTRAÇÃO DE ESPAÇAMENTO DE CARACTERES // ==================================================================== // Esta seção demonstra como o espaçamento de caracteres afeta a legibilidade do texto // O espaçamento de caracteres adiciona espaço uniforme entre caracteres individuais HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20); OutlineRoot.AddChild('Espaçamento de Caracteres', 200, 220); HotPDF.CurrentPage.TextOut(200, 220, 0, WideString('Espaçamento de Caracteres')); // Criar tabela de comparação ShowTable(130, 260); // Adicionar rótulos descritivos HotPDF.CurrentPage.SetFont('Times New Roman', [], 12); HotPDF.CurrentPage.TextOut(162, 280, 0, WideString('padrão 0')); // Rótulo de espaçamento normal HotPDF.CurrentPage.TextOut(162, 330, 0, WideString('espaço definido 5')); // Rótulo de espaçamento expandido // Demonstrar espaçamento normal de caracteres (0 - padrão) HotPDF.CurrentPage.SetFont('Times New Roman', [], 24); HotPDF.CurrentPage.TextOut(278, 275, 0, WideString('Caractere')); // Demonstrar espaçamento expandido de caracteres (+5 unidades entre caracteres) HotPDF.CurrentPage.SetCharacterSpacing(5); // Adicionar 5 unidades entre cada caractere HotPDF.CurrentPage.TextOut(278, 320, 0, WideString('Caractere')); HotPDF.CurrentPage.SetCharacterSpacing(0); // Redefinir para espaçamento normal // ==================================================================== // SEÇÃO 5: DEMONSTRAÇÃO DE ESPAÇAMENTO DE PALAVRAS // ==================================================================== // Esta seção demonstra como o espaçamento de palavras afeta o layout do texto // O espaçamento de palavras adiciona espaço especificamente entre palavras (em caracteres de espaço) HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20); OutlineRoot.AddChild('Espaçamento de Palavras', 200, 380); HotPDF.CurrentPage.TextOut(200, 380, 0, WideString('Espaçamento de Palavras')); // Criar tabela de comparação ShowTable(130, 420); // Adicionar rótulos descritivos HotPDF.CurrentPage.SetFont('Times New Roman', [], 12); HotPDF.CurrentPage.TextOut(162, 440, 0, WideString('padrão 0')); // Rótulo de espaçamento normal de palavras HotPDF.CurrentPage.TextOut(162, 490, 0, WideString('espaço definido 10')); // Rótulo de espaçamento expandido de palavras // Demonstrar espaçamento normal de palavras (0 - padrão) HotPDF.CurrentPage.SetFont('Times New Roman', [], 24); HotPDF.CurrentPage.TextOut(280, 430, 0, WideString('Espaço Palavra')); // Demonstrar espaçamento expandido de palavras (+10 unidades entre palavras) HotPDF.CurrentPage.SetWordSpacing(10); // Adicionar 10 unidades entre palavras HotPDF.CurrentPage.TextOut(280, 480, 0, WideString('Espaço Palavra')); HotPDF.CurrentPage.SetWordSpacing(0); // Redefinir para espaçamento normal // ==================================================================== // SEÇÃO 6: DEMONSTRAÇÃO DE MODOS DE RENDERIZAÇÃO DE TEXTO // ==================================================================== // Esta seção demonstra diferentes efeitos de renderização de texto disponíveis em PDF // O texto pode ser preenchido, contornado, ambos, ou invisível (para efeitos avançados) HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20); OutlineRoot.AddChild('Modos de Renderização', 200, 550); HotPDF.CurrentPage.TextOut(200, 550, 0, WideString('Modos de Renderização')); // Criar uma estrutura de tabela complexa para comparação de modos de renderização // Contorno da tabela principal (500x150 pixels) HotPDF.CurrentPage.Rectangle(50, 600, 500, 150); HotPDF.CurrentPage.Stroke; // Divisores verticais criando 4 colunas de largura igual HotPDF.CurrentPage.MoveTo(175, 600); // Primeiro divisor HotPDF.CurrentPage.LineTo(175, 750); HotPDF.CurrentPage.Stroke; HotPDF.CurrentPage.MoveTo(300, 600); // Segundo divisor HotPDF.CurrentPage.LineTo(300, 750); HotPDF.CurrentPage.Stroke; HotPDF.CurrentPage.MoveTo(425, 600); // Terceiro divisor HotPDF.CurrentPage.LineTo(425, 750); HotPDF.CurrentPage.Stroke; // Divisor horizontal separando cabeçalho do conteúdo HotPDF.CurrentPage.MoveTo(50, 665); HotPDF.CurrentPage.LineTo(550, 665); HotPDF.CurrentPage.Stroke; // Adicionar cabeçalhos de colunas descrevendo cada modo de renderização HotPDF.CurrentPage.SetFont('Arial', [], 12); HotPDF.CurrentPage.TextOut(100, 620, 0, WideString('Preencher')); // Modo preencher - texto colorido sólido HotPDF.CurrentPage.TextOut(215, 620, 0, WideString('Contorno')); // Modo contorno - texto contornado HotPDF.CurrentPage.TextOut(320, 620, 0, WideString('Preencher Contorno')); // Modo combinado - preenchido com contorno HotPDF.CurrentPage.TextOut(465, 620, 0, WideString('Invisível')); // Modo invisível - para efeitos especiais // Configurar cores para demonstração dramática de efeito de renderização HotPDF.CurrentPage.SetFont('Arial', [fsBold], 72); // Fonte grande para visibilidade clara HotPDF.CurrentPage.SetRGBStrokeColor(clRed); // Cor de contorno vermelha HotPDF.CurrentPage.SetRGBFillColor(clYellow); // Cor de preenchimento amarela // Demonstrar modo de renderização Preencher - texto colorido sólido HotPDF.CurrentPage.SetTextRenderingMode(trFill); HotPDF.CurrentPage.TextOut(90, 670, 0, WideString('P')); // Demonstrar modo de renderização Contorno - apenas texto contornado HotPDF.CurrentPage.SetTextRenderingMode(trStroke); HotPDF.CurrentPage.TextOut(215, 670, 0, WideString('D')); // Demonstrar modo de renderização Preencher+Contorno - texto preenchido com contorno colorido HotPDF.CurrentPage.SetTextRenderingMode(trFillThenStroke); HotPDF.CurrentPage.TextOut(340, 670, 0, WideString('F')); // Demonstrar modo de renderização Invisível - texto está presente mas não visível // (útil para texto pesquisável sobre imagens, ou técnicas de layout avançadas) HotPDF.CurrentPage.SetTextRenderingMode(trInvisible); HotPDF.CurrentPage.TextOut(475, 670, 0, WideString('X')); // Redefinir para modo de renderização padrão para qualquer texto subsequente HotPDF.CurrentPage.SetTextRenderingMode(trFillThenStroke); // Finalizar e salvar o documento PDF HotPDF.EndDoc; finally // Garantir limpeza adequada do componente HotPDF HotPDF.Free; end; end.
HotPDF Delphi组件:在PDF文档中创建垂直文本布局 本综合指南演示了HotPDF组件如何让开发者轻松在PDF文档中生成Unicode垂直文本。 理解垂直排版(縦書き/세로쓰기/竖排) 垂直排版,也称为垂直书写,中文称为縱書,日文称为tategaki(縦書き),是一种起源于2000多年前古代中国的传统文本布局方法。这种书写系统从上到下、从右到左流动,创造出具有深厚文化意义的独特视觉外观。 历史和文化背景 垂直书写系统在东亚文学和文献中发挥了重要作用: 中国:传统中文文本、古典诗歌和书法主要使用垂直布局。现代简体中文主要使用横向书写,但垂直文本在艺术和仪式场合仍然常见。 日本:日语保持垂直(縦書き/tategaki)和水平(横書き/yokogaki)两种书写系统。垂直文本仍广泛用于小说、漫画、报纸和传统文档。 韩国:历史上使用垂直书写(세로쓰기),但现代韩语(한글)主要使用水平布局。垂直文本出现在传统场合和艺术应用中。 越南:传统越南文本在使用汉字(Chữ Hán)书写时使用垂直布局,但随着拉丁字母的采用,这种做法已基本消失。 垂直文本的现代应用 尽管全球趋向于水平书写,垂直文本布局在几个方面仍然相关: 出版:台湾、日本和香港的传统小说、诗集和文学作品…
HotPDF Delphi 컴포넌트: PDF 문서에서 세로쓰기 텍스트 레이아웃 생성 이 포괄적인 가이드는 HotPDF 컴포넌트를 사용하여…
HotPDF Delphiコンポーネント:PDFドキュメントでの縦書きテキストレイアウトの作成 この包括的なガイドでは、HotPDFコンポーネントを使用して、開発者がPDFドキュメントでUnicode縦書きテキストを簡単に生成する方法を実演します。 縦書き組版の理解(縦書き/세로쓰기/竖排) 縦書き組版は、日本語では縦書きまたはたてがきとも呼ばれ、2000年以上前の古代中国で生まれた伝統的なテキストレイアウト方法です。この書字体系は上から下、右から左に流れ、深い文化的意義を持つ独特の視覚的外観を作り出します。 歴史的・文化的背景 縦書きシステムは東アジアの文学と文書において重要な役割を果たしてきました: 中国:伝統的な中国語テキスト、古典詩、書道では主に縦書きレイアウトが使用されていました。現代の簡体字中国語は主に横書きを使用していますが、縦書きテキストは芸術的・儀式的な文脈で一般的です。 日本:日本語は縦書き(縦書き/たてがき)と横書き(横書き/よこがき)の両方の書字体系を維持しています。縦書きテキストは小説、漫画、新聞、伝統的な文書で広く使用されています。 韓国:歴史的には縦書き(세로쓰기)を使用していましたが、現代韓国語(한글)は主に横書きレイアウトを使用しています。縦書きテキストは伝統的な文脈や芸術的応用で見られます。 ベトナム:伝統的なベトナム語テキストは漢字(Chữ Hán)で書かれた際に縦書きレイアウトを使用していましたが、この慣行はラテン文字の採用とともにほぼ消失しました。 縦書きテキストの現代的応用 横書きへの世界的な傾向にもかかわらず、縦書きテキストレイアウトはいくつかの文脈で関連性を保っています: 出版:台湾、日本、香港の伝統的な小説、詩集、文学作品…
Отладка проблем порядка страниц PDF: Реальный кейс-стади компонента HotPDF Опубликовано losLab | Разработка PDF |…
PDF 페이지 순서 문제 디버깅: HotPDF 컴포넌트 실제 사례 연구 발행자: losLab | PDF 개발…
PDFページ順序問題のデバッグ:HotPDFコンポーネント実例研究 発行者:losLab | PDF開発 | Delphi PDFコンポーネント PDF操作は特にページ順序を扱う際に複雑になることがあります。最近、私たちはPDF文書構造とページインデックスに関する重要な洞察を明らかにした魅力的なデバッグセッションに遭遇しました。このケーススタディは、一見単純な「オフバイワン」エラーがPDF仕様の深い調査に発展し、文書構造に関する根本的な誤解を明らかにした過程を示しています。 PDFページ順序の概念 - 物理的オブジェクト順序と論理的ページ順序の関係 問題 私たちはHotPDF DelphiコンポーネントのCopyPageと呼ばれるPDFページコピーユーティリティに取り組んでいました。このプログラムはデフォルトで最初のページをコピーするはずでしたが、代わりに常に2番目のページをコピーしていました。一見すると、これは単純なインデックスバグのように見えました -…