Technical Article

HotPDF TextOut u Delphi-ju: Veličina, stil, rotacija, i razmak

Hello World program postavlja tekst na stranicu, ali produkcionim dokumentima je potrebno više. U HotPDF-u, stilizovanje i pozicioniranje teksta se ne vrše preko svojstava kontrola. Ne postoji komponenta labela. Umesto toga, menjate atribute u grafičkom stanju stranice pre nego što pozovete TextOut. Kada ih jednom podesite, ovi atributi (veličina, stil, rotacija, razmak karaktera) primenjuju se na sve naredne pozive za ispis teksta dok ih ponovo ne promenite. Razumevanje interakcije ovih atributa je ključ za kreiranje čistih tabela, zaglavlja i rotiranih natpisa bez prevelike veličine fajla.

Pozicioniranje teksta i koordinatni sistemi

Kao i svako iscrtavanje u HotPDF-u, TextOut meri rastojanje od donjeg levog ugla stranice u tačkama (points, 1/72 inča). Koordinate koje prosleđujete označavaju baznu liniju (baseline) prvog karaktera, a ne gornji levi uokvirujući kvadrat. To znači da ako crtate na Y=0, tekst će se renderovati van donje ivice stranice, pri čemu će biti vidljivi samo donji delovi slova (descenders, kao što su repovi na „g“ i „y“). Sigurna margina od ivice je najmanje 36 do 72 tačke (0.5 do 1.0 inč).

Varijacije veličine i stila fonta

Atributi fonta se podešavaju pomoću metode SetFont na trenutnoj stranici. Parametar stila je Delphi skup (set), što vam omogućava da kombinujete stilove kao što su fsBold i fsItalic.

procedure DrawStyledText(Pdf: THotPDF);
begin
  // FontName, Style, Size, CharSet
  Pdf.CurrentPage.SetFont('Arial', [fsBold], 16, DEFAULT_CHARSET);
  Pdf.CurrentPage.TextOut(72, 750, 0, 'Document Header (Arial Bold 16pt)');

  Pdf.CurrentPage.SetFont('Times New Roman', [fsItalic], 11, DEFAULT_CHARSET);
  Pdf.CurrentPage.TextOut(72, 720, 0, 'This is body italic text in Times 11pt.');
end;

Četvrti parametar za SetFont je skup karaktera (character set). Korišćenje DEFAULT_CHARSET omogućava operativnom sistemu da razreši kodiranje, što je podešavanje objašnjeno u višejezičnom Hello World primeru.

Rotiranje teksta pod uglom

TextOut prihvata ugao rotacije kao svoj treći parametar. Ugao je izražen u stepenima, krećući se u smeru suprotnom od kretanja kazaljke na satu. Kada je tekst rotiran, koordinatna tačka (X, Y) deluje kao oslonac (pivot) oko kog se tekst okreće.

procedure DrawRotatedLabels(Pdf: THotPDF);
begin
  Pdf.CurrentPage.SetFont('Arial', [], 10, DEFAULT_CHARSET);

  // Draws text rotated 45 degrees upward
  Pdf.CurrentPage.TextOut(100, 300, 45, 'Rotated 45 Degrees');

  // Draws text rotated 90 degrees (pointing straight up)
  Pdf.CurrentPage.TextOut(200, 300, 90, 'Vertical Label (90 Degrees)');
end;

Rotiranje za 90 stepeni je standardan način za pisanje vertikalnih zaglavlja tabela. Česta greška u rasporedu je zaboravljanje da se tekst proteže nagore od Y kada se rotira za 90 stepeni, što ga može izbaciti van vrha kolone ako je početni Y previše visok.

Podešavanje razmaka između karaktera i reči

Za precizne rasporede, kao što je uklapanje teksta u blok obrasca ili poravnavanje kolona, možete prilagoditi razmak između karaktera i reči. Ovo su atributi grafičkog stanja stranice i ostaju aktivni dok se ne promene.

procedure DrawSpacedText(Pdf: THotPDF);
begin
  Pdf.CurrentPage.SetFont('Courier New', [], 12, DEFAULT_CHARSET);

  // Add 2 points of spacing between characters
  Pdf.CurrentPage.CharSpacing := 2.0;
  Pdf.CurrentPage.TextOut(72, 600, 0, 'Expanded letter spacing');

  // Reset character spacing and add 5 points between words
  Pdf.CurrentPage.CharSpacing := 0.0;
  Pdf.CurrentPage.WordSpacing := 5.0;
  Pdf.CurrentPage.TextOut(72, 570, 0, 'Spaced out words');
end;

CharSpacing dodaje dodatne tačke prostora između svakog slova. WordSpacing dodaje prostor između reči (gde god se pojavi karakter razmaka U+0020). Standardne vrednosti su 0. Pozitivne vrednosti proširuju tekstualni blok, dok ga negativne kompresuju. Podešavanje ovih vrednosti je čist način da se string uklopi u granicu, umesto da se smanjuje veličina fonta i time kvari hijerarhija rasporeda.

Svojstva TextOut, SetFont i razmaka prikazana ovde deo su standardnog HotPDF Component API-ja za Delphi i C++Builder.