HotPDF Vertical Text Sample

This example demonstrates how the HotPDF component generates Unicode vertical text.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, HPDFDoc;

type
  TForm1 = class(TForm)
    Button1: TButton;
    HotPDF: THotPDF;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.DFM}
// Delphi 7 cannot display Unicode characters correctly.
// You need Delphi 2007 or above to open this file.

procedure TForm1.Button1Click(Sender: TObject);
begin
  HotPDF.BeginDoc;
  HotPDF.FileName := 'VerticalText.pdf';

  HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 0, False);  //Set horizontal text
  HotPDF.CurrentPage.UnicodeTextOut( 30, 10, 0, 'Horizontal Text Горизонтальный текст 横書き');  //Print horizontal text

  HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 0, True);  //Set vertical text
  HotPDF.CurrentPage.UnicodeTextOut( 30, 40, 0, 'Vertical Text');   //Print vertical text
  HotPDF.CurrentPage.UnicodeTextOut( 70, 40, 0, 'Texto vertical');
  HotPDF.CurrentPage.UnicodeTextOut( 110, 40, 0, 'Vertikaler Text');
  HotPDF.CurrentPage.UnicodeTextOut( 150, 40, 0, 'Texte vertical');
  HotPDF.CurrentPage.UnicodeTextOut( 190, 40, 0, 'Вертикальный текст');
  HotPDF.CurrentPage.UnicodeTextOut( 230, 40, 0, 'Testo verticale');
  HotPDF.CurrentPage.UnicodeTextOut( 270, 40, 0, '垂直文本');
  HotPDF.CurrentPage.UnicodeTextOut( 310, 40, 0, '縦書きテキスト');
  HotPDF.CurrentPage.UnicodeTextOut( 350, 40, 0, 'Verticale tekst');
  HotPDF.CurrentPage.SetFont('Malgun Gothic Semilight', [], 12, 0, True);  //Set Korean Font
  HotPDF.CurrentPage.UnicodeTextOut( 390, 40, 0, '한국어 텍스트');
  HotPDF.EndDoc;
end;
end.

HotPDF Text Out Sample

HotPDF component text out sample generates font and character set demonstration, as shown in the image above.

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.

HotPDF Hello World Sample

Hello world from Delphi HotPDF Component!

program HelloWorld;
{$APPTYPE CONSOLE}
uses
  Windows, Messages, SysUtils, Vcl.Graphics, Classes, HPDFDoc;
var
  HotPDF: THotPDF;
  Titles: TStrings;
  Title:  String;
  Window: HWND;
begin
  // Close destination PDF file if opened in Adobe or Fixit PDF readers & editors.
  Titles := TStringList.Create;
  Titles.CommaText := '"HelloWorld.pdf", "HelloWorld.pdf - Foxit Reader", "HelloWorld.pdf - Foxit PhantomPDF"';

  for Title in Titles do
  begin
    Window := FindWindow(Nil, PChar(Title));
    while Window <> 0 do
    begin
      postmessage(Window, WM_CLOSE, 0, 0);
      Window := FindWindowEx(0, Window, Nil, PChar(Title));
    end;
  end;
  Titles.Free;

  // Create HelloWorld.pdf and write something
  HotPDF:= THotPDF.Create(nil);
  try
    HotPDF.AutoLaunch := true;
    HotPDF.FileName := 'HelloWorld.pdf';
    HotPDF.BeginDoc;
    HotPDF.CurrentPage.SetFont('Arial Unicode MS', [], 12, 0, False);
    HotPDF.CurrentPage.TextOut(80, 50, 0, 'Hello, Delphi PDF world!');
    HotPDF.CurrentPage.TextOut(80, 70, 0, 'Hola, mundo Delphi PDF!');
    HotPDF.CurrentPage.TextOut(80, 90, 0, 'Hallo, Delphi PDF Welt!');
    HotPDF.CurrentPage.TextOut(80, 110, 0, 'Bonjour, monde PDF Delphi!');
    HotPDF.CurrentPage.TextOut(80, 130, 0, 'Ciao, mondo Delphi PDF!');
    HotPDF.CurrentPage.UnicodeTextOut(80, 150, 0, 'Olá, mundo Delphi PDF!');
    HotPDF.CurrentPage.UnicodeTextOut(80, 170, 0, 'Здравствуйте, Delphi PDF мир!');
    HotPDF.CurrentPage.UnicodeTextOut(80, 190, 0, 'こんにちは、Delphi PDFの世界!');
    HotPDF.CurrentPage.UnicodeTextOut(80, 210, 0, 'Merhaba, Delphi PDF dünyası!');
    HotPDF.CurrentPage.UnicodeTextOut(80, 230, 0, '你好,Delphi PDF世界');
    HotPDF.CurrentPage.SetFont('Malgun Gothic Semilight', [], 12, 0, False);
    // Set font for Korean text displaying
    HotPDF.CurrentPage.UnicodeTextOut(80, 250, 0, '여보세요, Delphi PDF 세계!');
    HotPDF.EndDoc;
  finally
    HotPDF.Free;
  end;
end.