すべてのPDFライブラリには「hello world」が含まれていますが、HotPDFのそれは少し時間をかけて見る価値があります。なぜなら、何かを実行する最小のプログラムが、既に2つの決定を強いるからです。それは、どのフォントを設定するか、そしてページ上のどこにテキストを配置するかです。この2つを正しく行えば、残りのAPIはそのバリエーションに過ぎません。これが全体像です。1つのページにほぼ1ダースの言語で読者に挨拶を書き込むコンソールプログラムです:
program HelloWorld;
{$APPTYPE CONSOLE}
uses
Winapi.Windows, // for DEFAULT_CHARSET; on pre-XE2 Delphi use plain Windows
HPDFDoc; // HotPDF main unit
procedure CreateHelloWorld(const FileName: string);
var
Pdf: THotPDF;
begin
Pdf := THotPDF.Create(nil);
try
Pdf.FileName := FileName;
Pdf.Compression := cmFlateDecode; // shrink the content streams
Pdf.FontEmbedding := True; // embed the face so it renders anywhere
Pdf.BeginDoc;
// One face covering many scripts. The 4th argument is the Windows charset;
// DEFAULT_CHARSET lets the system pick glyphs per string.
Pdf.CurrentPage.SetFont('Arial Unicode MS', [], 14, DEFAULT_CHARSET);
// TextOut measures from the BOTTOM-LEFT corner, in points, Y growing upward.
Pdf.CurrentPage.TextOut(72, 760, 0, 'Hello, Delphi PDF world!'); // English
Pdf.CurrentPage.TextOut(72, 730, 0, 'Hola, mundo Delphi PDF!'); // Spanish
Pdf.CurrentPage.TextOut(72, 700, 0, 'Hallo, Delphi PDF Welt!'); // German
Pdf.CurrentPage.TextOut(72, 670, 0, 'Bonjour, monde PDF Delphi!'); // French
Pdf.CurrentPage.TextOut(72, 640, 0, 'Ciao, mondo Delphi PDF!'); // Italian
Pdf.CurrentPage.TextOut(72, 610, 0, 'Olá, mundo Delphi PDF!'); // Portuguese
Pdf.CurrentPage.TextOut(72, 580, 0, 'Здравствуйте, Delphi PDF мир!'); // Russian
Pdf.CurrentPage.TextOut(72, 550, 0, 'こんにちは、Delphi PDFの世界!'); // Japanese
Pdf.CurrentPage.TextOut(72, 520, 0, 'Merhaba, Delphi PDF dünyası!'); // Turkish
Pdf.CurrentPage.TextOut(72, 490, 0, '你好,Delphi PDF世界'); // Chinese
Pdf.CurrentPage.TextOut(72, 460, 0, '여보세요, Delphi PDF 세계!'); // Korean
Pdf.EndDoc;
finally
Pdf.Free;
end;
end;
begin
CreateHelloWorld('HelloWorld.pdf');
Writeln('Wrote HelloWorld.pdf');
end.

これが例のすべてです。THotPDF.Create(nil)とtry/finally ... Freeの組み合わせは、通常のDelphiの所有権パターンであり、PDFもそれを変更しません。注目に値するのは、内部の4段階の構造です:プロパティの設定、BeginDoc、描画、EndDocです。この順序は入れ替えることができません
BeginDocの前にドキュメントプロパティを設定する
BeginDocはHotPDFがドキュメントの構造を確定する瞬間であるため、ファイル全体に影響を与えるものはすべてその前に設定する必要があります。Compression := cmFlateDecodeはコンテンツストリームのFlateDecodeをオンにし、これによりコンパクトなファイルと無駄に肥大化したファイルの違いが生まれます。FontEmbedding := Trueは描画に使用するフォントをファイルにパックするため、Arial Unicode MSがインストールされていないマシンでも同じようにレンダリングされます。BeginDocの後にどちらかを割り当てても、進行中のドキュメントに対しては静かに何も行わず、警告エラーも出ません
SetFont、そしてTextOut、原点に注意する
描画の呼び出しに関する2つの点が、最初のページで皆をつまずかせます。最初の点は順序です:SetFontは、それに依存するTextOutの前に実行する必要があり、すべてのAddPageの後に繰り返す必要があります。なぜなら、現在のフォントはページ区切りを越えて保持されないからです。2つ目の点は座標系です。TextOutはページの左上ではなく、左下隅からポイント(1/72インチ)で測定し、上に移動するにつれてYが増加します。そのため、ここでの行は760から下に向かって進み、各行は前の行から30ポイント下にあります。画面グラフィックスから来た人は反対を想定し、最初の行を画面の下端からまっすぐ書き出してしまいます
1つのフォントで多くのスクリプトを
1回のSetFontでラテン文字、キリル文字、日本語、中国語を同じページに表示できる理由は、書体そのものにあります:Arial Unicode MSには、ほぼすべてのスクリプトのグリフが1つのファイルにバンドルされています。SetFontの4番目の引数はWindowsの文字セットであり、DEFAULT_CHARSETを渡すことで、すべてを1つの古いコードページに固定するのではなく、システムに文字列ごとのグリフを選択させることができます。この利便性には2つの注意点が伴います。フォントはPDFを構築するマシンに存在している必要があります。なぜなら、HotPDFはOSが名前に解決したものを埋め込むからです。Arial Unicode MSがない場合、Windowsは静かに代替フォントに切り替え、CJKテキストが空のボックスとして表示されることがあります。そして、すべてのスクリプトを均等にカバーしているわけではありません:アラビア語やヘブライ語のような右から左への記述、または複雑な形成が必要なものについては、RegisterUnicodeTTFと右から左へのテキスト呼び出しでロードされた専用のフォントを使用します。これは別のトピックになります
これを実行すると、作業ディレクトリにHelloWorld.pdfが作成されます。1ページ、数行の多言語テキストが含まれ、圧縮され、フォントが埋め込まれています。次の明らかなステップは、そのテキストにサイズ、スタイル、回転を与え、テキストのブロックを意図的に複数配置することであり、これら両方についてはTextOutサンプルで説明されています。テキストだけでなく、罫線、ボックス、画像を描画したい場合も、同じページオブジェクトにそれらの呼び出しが含まれています
ここで示されたTextOut、SetFont、およびドキュメントの呼び出しは、DelphiおよびC++Builder用のHotPDF Componentの一部です