Fiecare bibliotecă PDF livrează un „hello world”, iar cel din HotPDF merită parcurs pe îndelete, pentru că cel mai mic program care face ceva vă impune deja două decizii pe care le veți repeta în fiecare document de după: ce font să setați și unde pe pagină aterizează textul. Nimeriți-le pe acestea două și restul API-ului este doar variațiuni pe aceeași temă. Iată tot programul, o aplicație de consolă care scrie o singură pagină ce salută cititorul în aproape o duzină de limbi:
program HelloWorld;
{$APPTYPE CONSOLE}
uses
Winapi.Windows, // pentru DEFAULT_CHARSET; pe Delphi anterior XE2 folosiți Windows simplu
HPDFDoc; // unitatea principală HotPDF
procedure CreateHelloWorld(const FileName: string);
var
Pdf: THotPDF;
begin
Pdf := THotPDF.Create(nil);
try
Pdf.FileName := FileName;
Pdf.Compression := cmFlateDecode; // micșorează fluxurile de conținut
Pdf.FontEmbedding := True; // încorporează fontul, ca să se randeze oriunde
Pdf.BeginDoc;
// Un singur font care acoperă multe scrieri. Al 4-lea argument este setul de caractere Windows;
// DEFAULT_CHARSET lasă sistemul să aleagă glifele pentru fiecare șir.
Pdf.CurrentPage.SetFont('Arial Unicode MS', [], 14, DEFAULT_CHARSET);
// TextOut măsoară din colțul din STÂNGA JOS, în puncte, cu Y crescând în sus.
Pdf.CurrentPage.TextOut(72, 760, 0, 'Hello, Delphi PDF world!'); // engleză
Pdf.CurrentPage.TextOut(72, 730, 0, 'Hola, mundo Delphi PDF!'); // spaniolă
Pdf.CurrentPage.TextOut(72, 700, 0, 'Hallo, Delphi PDF Welt!'); // germană
Pdf.CurrentPage.TextOut(72, 670, 0, 'Bonjour, monde PDF Delphi!'); // franceză
Pdf.CurrentPage.TextOut(72, 640, 0, 'Ciao, mondo Delphi PDF!'); // italiană
Pdf.CurrentPage.TextOut(72, 610, 0, 'Olá, mundo Delphi PDF!'); // portugheză
Pdf.CurrentPage.TextOut(72, 580, 0, 'Здравствуйте, Delphi PDF мир!'); // rusă
Pdf.CurrentPage.TextOut(72, 550, 0, 'こんにちは、Delphi PDFの世界!'); // japoneză
Pdf.CurrentPage.TextOut(72, 520, 0, 'Merhaba, Delphi PDF dünyası!'); // turcă
Pdf.CurrentPage.TextOut(72, 490, 0, '你好,Delphi PDF世界'); // chineză
Pdf.CurrentPage.TextOut(72, 460, 0, '여보세요, Delphi PDF 세계!'); // coreeană
Pdf.EndDoc;
finally
Pdf.Free;
end;
end;
begin
CreateHelloWorld('HelloWorld.pdf');
Writeln('Wrote HelloWorld.pdf');
end.

Acesta este tot exemplul. Perechea THotPDF.Create(nil) cu try/finally ... Free este tiparul obișnuit de proprietate din Delphi, iar PDF-ul nu îl schimbă. Ce merită atenție este coloana vertebrală în patru pași din interior: setați proprietățile, BeginDoc, desenați, EndDoc. Ordinea nu este interschimbabilă
Setați proprietățile documentului înainte de BeginDoc
BeginDoc este momentul în care HotPDF fixează structura documentului, așa că orice afectează întregul fișier trebuie setat înaintea lui. Compression := cmFlateDecode pornește FlateDecode pentru fluxurile de conținut, ceea ce face diferența dintre un fișier compact și unul umflat inutil. FontEmbedding := True împachetează în fișier fontul cu care desenați, așa că arată la fel pe o mașină pe care nu a fost instalat niciodată Arial Unicode MS ca pe a dumneavoastră. Atribuiți oricare dintre ele după BeginDoc și nu face nimic, în tăcere, documentului deja început, fără vreo eroare care să vă avertizeze
SetFont, apoi TextOut, și fiți atent la origine
Două lucruri legate de apelurile de desenare prind pe toată lumea la prima pagină. Primul este ordinea: SetFont trebuie să ruleze înaintea oricărui TextOut care depinde de el și trebuie repetat după fiecare AddPage, pentru că fontul curent nu supraviețuiește unei schimbări de pagină. Al doilea este sistemul de coordonate. TextOut măsoară din colțul din stânga jos al paginii, nu din stânga sus, cu Y crescând pe măsură ce urcați, în puncte (1/72 dintr-un inch). De aceea liniile de aici coboară în jos de la 760, fiecare cu 30 de puncte sub cea dinainte. Oricine vine dinspre grafica de ecran presupune inversul și scrie prima linie direct dincolo de marginea de jos
Un singur font, multe scrieri
Motivul pentru care un singur SetFont poate purta latină, chirilică, japoneză și chineză pe aceeași pagină este chiar fontul: Arial Unicode MS adună într-un singur fișier glife pentru aproape orice scriere. Al patrulea argument al lui SetFont este setul de caractere Windows, iar transmiterea lui DEFAULT_CHARSET lasă sistemul să aleagă glifele pentru fiecare șir, în loc să lege totul de o singură pagină de coduri moștenită. Două rezerve vin la pachet cu această comoditate. Fontul trebuie să fie prezent pe mașina care construiește PDF-ul, pentru că HotPDF încorporează ceea ce rezolvă sistemul de operare din numele dat; dacă Arial Unicode MS lipsește, Windows pune discret un înlocuitor, iar textul dumneavoastră CJK poate ieși ca niște casete goale. Și nu acoperă toate scrierile la fel: pentru scrierea de la dreapta la stânga, precum araba și ebraica, sau pentru orice are nevoie de modelare complexă, apelați la un font dedicat, încărcat cu RegisterUnicodeTTF, și la apelurile de text de la dreapta la stânga, ceea ce este un subiect în sine
Rulați-l și obțineți HelloWorld.pdf în directorul de lucru: o pagină, câteva linii de text multilingv, comprimate, cu fontul încorporat. Pașii următori evidenți sunt să dați textului dimensiune, stil și rotație și să plasați intenționat mai mult de un bloc de text, ambele fiind parcurse în exemplul TextOut. Când vreți să desenați linii, casete și imagini, nu doar text, același obiect pagină găzduiește și acele apeluri
Apelurile TextOut, SetFont și cele de document prezentate aici fac parte din HotPDF Delphi Component pentru Delphi și C++Builder