program TextOut;
{$APPTYPE CONSOLE}
uses
SysUtils, Graphics, Classes, Windows, HPDFDoc;
var
HotPDF: THotPDF;
OutlineRoot: THPDFDocOutlineObject;
CurrnetOutline: THPDFDocOutlineObject;
procedure ShowFontGroup ( FontGroup: AnsiString; Position: Integer );
begin
HotPDF.CurrentPage.SetFont( FontGroup, [], 12);
HotPDF.CurrentPage.TextOut( Position, 60, 0, FontGroup );
HotPDF.CurrentPage.SetFont( FontGroup, [fsBold], 12);
HotPDF.CurrentPage.TextOut( Position, 80, 1, FontGroup+'-Bold' );
// Show font with positive rotation
HotPDF.CurrentPage.SetFont( FontGroup, [fsItalic], 12);
HotPDF.CurrentPage.TextOut( Position, 100, -1, FontGroup+'-Italic' );
// Show font with negative rotation
HotPDF.CurrentPage.SetFont( FontGroup, [fsBold, fsItalic], 12);
HotPDF.CurrentPage.TextOut( Position, 120, 0, FontGroup+'-Bold-Italic' );
end;
procedure ShowCharset ( FontCharset: TFontCharset; First, Last: Integer; Y1, Y2: Integer );
var
i: Integer;
CSName: AnsiString;
begin
// https://docs.microsoft.com/en-us/previous-versions/cc194829(v=msdn.10)
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';
end;
HotPDF.CurrentPage.SetFont( 'Arial', [fsBold, fsItalic], 12);
HotPDF.CurrentPage.TextOut ( 50, Y1, 0, CSName + ' example: ');
HotPDF.CurrentPage.SetFont( 'Arial', [], 14, FontCharset );
for I := First to Last do
begin
HotPDF.CurrentPage.TextOut( 30 + (I mod 25) * 22, Y2 + (I div 25) * 17, 0 , AnsiChar(chr(I)) );
//Show a sequence of characters in the computed position.
end;
end;
procedure ShowTable ( X, Y: Integer);
begin
HotPDF.CurrentPage.Rectangle(X, Y, 300, 50);
HotPDF.CurrentPage.Stroke;
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;
begin
HotPDF:= THotPDF.Create(nil);
try
HotPDF.AutoLaunch := true;
HotPDF.NotEmbeddedFonts.Add('Arial');
HotPDF.StandardFontEmulation := true;
HotPDF.FileName := 'TextOut.pdf';
HotPDF.PageLayout := plOneColumn;
HotPDF.BeginDoc( true );
OutlineRoot := HotPDF.OutlineRoot;
//--------------------------- Show fonts --------------------------//
HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20);
HotPDF.CurrentPage.TextOut( 195, 20, 0, 'Show Fonts' );
OutlineRoot.AddChild( 'Show Fonts', 180, 20 );
// Add Outline block linked to 180, 20 in current page
ShowFontGroup( 'Arial', 50 );
ShowFontGroup( 'Times New Roman', 180 );
ShowFontGroup( 'Courier New', 350 );
//--------------------------- Charsets --------------------------//
HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20);
HotPDF.CurrentPage.TextOut( 200, 160, 0, 'Charsets' );
CurrnetOutline := OutlineRoot.AddChild( 'Charsets', 250, 170 );
CurrnetOutline.Opened := true;
CurrnetOutline.AddChild( 'ARABIC_CHARSET', 210, 110 );
ShowCharset ( ARABIC_CHARSET, 160, 250, 210, 110 );
CurrnetOutline.AddChild( 'EASTEUROPE_CHARSET', 320, 220 );
ShowCharset ( EASTEUROPE_CHARSET, 160, 250, 320, 220 );
CurrnetOutline.AddChild( 'OEM_CHARSET', 430, 330 );
ShowCharset ( OEM_CHARSET, 160, 250, 430, 330 );
CurrnetOutline.AddChild( 'RUSSIAN_CHARSET', 540, 440 );
ShowCharset ( RUSSIAN_CHARSET, 160, 250, 540, 440 );
CurrnetOutline.AddChild( 'TURKISH_CHARSET', 650, 550 );
ShowCharset ( TURKISH_CHARSET, 160, 250, 650, 550 );
HotPDF.AddPage;
//--------------------------- Text Scaling --------------------------//
HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20);
OutlineRoot.AddChild( 'Text Scaling', 200, 30 );
HotPDF.CurrentPage.TextOut( 180, 30, 0, 'Horizontal text scaling' );
ShowTable(130, 70);
HotPDF.CurrentPage.SetFont('Times New Roman', [], 12);
HotPDF.CurrentPage.TextOut( 160, 90, 0, 'default 100' );
HotPDF.CurrentPage.TextOut( 165, 135, 0, 'set to 50' );
HotPDF.CurrentPage.SetFont('Times New Roman', [], 24);
HotPDF.CurrentPage.TextOut( 280, 85, 0, 'Word' );
HotPDF.CurrentPage.SetHorizontalScaling( 50 );
HotPDF.CurrentPage.TextOut( 285, 130, 0, 'Word' );
HotPDF.CurrentPage.SetHorizontalScaling( 100 );
//--------------------------- Character Spacing --------------------------//
HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20);
OutlineRoot.AddChild( 'Character Spacing', 200, 190 );
HotPDF.CurrentPage.TextOut( 200, 190, 0, 'Character Spacing' );
ShowTable(130, 230);
HotPDF.CurrentPage.SetFont('Times New Roman', [], 12);
HotPDF.CurrentPage.TextOut( 162, 250, 0, 'default 0' );
HotPDF.CurrentPage.TextOut( 162, 298, 0, 'set space 5' );
HotPDF.CurrentPage.SetFont('Times New Roman', [], 24);
HotPDF.CurrentPage.TextOut( 278, 243, 0, 'Character' );
HotPDF.CurrentPage.SetCharacterSpacing( 5 );
HotPDF.CurrentPage.TextOut( 278, 290, 0, 'Character' );
HotPDF.CurrentPage.SetCharacterSpacing( 0 );
//--------------------------- Word Spacing --------------------------//
HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20);
OutlineRoot.AddChild( 'Word Spacing', 200, 350 );
HotPDF.CurrentPage.TextOut( 200, 350, 0, 'Word Spacing' );
ShowTable(130, 390);
HotPDF.CurrentPage.SetFont('Times New Roman', [], 12);
HotPDF.CurrentPage.TextOut( 162, 410, 0, 'default 0' );
HotPDF.CurrentPage.TextOut( 162, 460, 0, 'set space 10' );
HotPDF.CurrentPage.SetFont('Times New Roman', [], 24);
HotPDF.CurrentPage.TextOut( 280, 400, 0, 'Word Space' );
HotPDF.CurrentPage.SetWordSpacing( 10 );
HotPDF.CurrentPage.TextOut( 280, 450, 0, 'Word Space' );
HotPDF.CurrentPage.SetWordSpacing( 0 );
//--------------------------- Rendering modes --------------------------//
HotPDF.CurrentPage.SetFont('Arial', [fsBold, fsUnderline], 20);
OutlineRoot.AddChild( 'Rendering Modes', 200, 520 );
HotPDF.CurrentPage.TextOut( 200, 520, 0, 'Rendering Modes' );
HotPDF.CurrentPage.Rectangle( 50, 560, 500, 150 );
HotPDF.CurrentPage.Stroke;
HotPDF.CurrentPage.MoveTo( 175, 560 );
HotPDF.CurrentPage.LineTo( 175, 710 );
HotPDF.CurrentPage.Stroke;
HotPDF.CurrentPage.MoveTo( 300, 560 );
HotPDF.CurrentPage.LineTo( 300, 710 );
HotPDF.CurrentPage.Stroke;
HotPDF.CurrentPage.MoveTo( 425, 560 );
HotPDF.CurrentPage.LineTo( 425, 710 );
HotPDF.CurrentPage.Stroke;
HotPDF.CurrentPage.MoveTo( 50, 625 );
HotPDF.CurrentPage.LineTo( 550, 625 );
HotPDF.CurrentPage.Stroke;
HotPDF.CurrentPage.SetFont('Arial', [], 12);
HotPDF.CurrentPage.TextOut( 100, 580, 0, 'Fill');
HotPDF.CurrentPage.TextOut( 215, 580, 0, 'Stroke');
HotPDF.CurrentPage.TextOut( 320, 580, 0, 'Fill Stroke');
HotPDF.CurrentPage.TextOut( 465, 580, 0, 'Invisible');
HotPDF.CurrentPage.SetFont('Arial', [fsBold], 72);
HotPDF.CurrentPage.SetRGBStrokeColor ( clRed );
HotPDF.CurrentPage.SetRGBFillColor ( clYellow );
HotPDF.CurrentPage.SetTextRenderingMode( trFill );
HotPDF.CurrentPage.TextOut( 90, 630, 0, 'P');
HotPDF.CurrentPage.SetTextRenderingMode( trStroke );
HotPDF.CurrentPage.TextOut( 215, 630, 0, 'D');
HotPDF.CurrentPage.SetTextRenderingMode( trFillThenStroke );
HotPDF.CurrentPage.TextOut( 340, 630, 0, 'F');
HotPDF.CurrentPage.SetTextRenderingMode( trInvisible );
HotPDF.CurrentPage.TextOut( 475, 630, 0, 'X');
HotPDF.CurrentPage.SetTextRenderingMode( trFillThenStroke );
HotPDF.EndDoc;
finally
HotPDF.Free;
end;
end.