Vertikalni raspored je tradicionalni smer čitanja za kineski, japanski i korejski (CJK) tekst, gde se karakteri slažu od vrha do dna, a kolone teku zdesna nalevo. Implementacija ovog rasporeda u PDF-u nije stvar crtanja rotiranih tekstualnih blokova. Rotirana linija teksta se i dalje čita horizontalno, samo je okrenuta na stranu. Pravi vertikalni tekst zahteva da glifovi ostanu uspravni dok se spuštaju naniže, a određeni karakteri (poput znakova interpunkcije i crtica za duge samoglasnike) moraju se zameniti svojim vertikalnim varijantama. HotPDF podržava ovaj raspored kroz svoju SetFont konfiguraciju, ali postizanje čistih rezultata zahteva razumevanje načina na koji se koordinate pomeraju i kako se rukuje izuzecima u interpunkciji.
Prekidač za vertikalni font: SetFontIsVertical
Da biste omogućili vertikalni raspored, morate podesiti svojstvo IsVertical na True prilikom pozivanja SetFont-a. Ovo govori motoru za renderovanje da koristi vertikalne metričke parametre pisanja fonta, slažući karaktere naniže umesto da ih pomera udesno.
Kod u nastavku demonstrira podešavanje vertikalnog japanskog rasporeda na A4 stranici.
procedure DrawVerticalCJK(Pdf: THotPDF);
begin
Pdf.FontEmbedding := True;
Pdf.BeginDoc;
// FontName, Style, Size, CharSet, IsVertical (True here)
// 128 is SHIFTJIS_CHARSET for Japanese
Pdf.CurrentPage.SetFont('MS Mincho', [], 14, 128, True);
// In vertical mode, coordinates set the top-center of the first glyph
Pdf.CurrentPage.TextOut(500, 750, 0, 'これは縦書きテキストです。'); // "This is vertical text."
Pdf.CurrentPage.TextOut(460, 750, 0, '日本語のフォントを使用します。'); // Column 2 to the left
Pdf.EndDoc;
end;
Obratite pažnju na koordinate u pozivu TextOut. U vertikalnom režimu, X i Y koordinate određuju gornji centar prvog karaktera, a ne baznu liniju. Karakteri se slažu naniže od tog početnog Y. Ako crtate više kolona, one teku zdesna nalevo, tako da X koordinata sledeće kolone mora biti manja (ulevo) u odnosu na prethodnu.
Problem vertikalne interpunkcije (U+30FC)
Standardne datoteke horizontalnih fontova sadrže glifove dizajnirane da stoje jedan pored drugog. Kada je omogućen vertikalni raspored, motor za renderovanje rotira znakove interpunkcije (kao što su japanski zarezi i zagrade) i centrirajući ih. Međutim, katakana znak za produženi samoglasnik (chōonpu, U+30FC), koji izgleda kao horizontalna crta „ー“, mora se rotirati da bi postao vertikalna linija „丨“.
Neki fontovi ne mapiraju U+30FC automatski u njegovu vertikalnu varijantu pod vertikalnim rasporedom. Ako primetite da se vaši znaci za produženi samoglasnik renderuju kao horizontalne crtice u vertikalnom steku, morate zameniti U+30FC vertikalnom varijantom U+FE31 (vertikalni znak za produženi samoglasnik) u vašim string konstantama pre pozivanja TextOut-a. Ova zamena primorava da se renderuje ispravna uspravna vertikalna crtica.
Izbor fonta i skupovi karaktera
Vertikalni raspored radi samo sa fontovima koji sadrže tabele vertikalnog rasporeda (kao što je tabela „vmtx“ u TrueType-u). Tradicionalni japanski fontovi kao što su MS Mincho, MS Gothic i Arial Unicode MS sadrže ove tabele. Standardni zapadni fontovi ih nemaju, pa će podešavanje IsVertical na True za takav font ili ignorisati prekidač ili izobličiti glifove.
Pored toga, uverite se da prosleđujete ispravan skup karaktera metodi SetFont (kao što je SHIFTJIS_CHARSET za japanski ili HANGEUL_CHARSET za korejski) i podesite FontEmbedding := True pre poziva BeginDoc kako biste garantovali da se svojstva fonta prenose na sistem čitaoca.
Konfiguracije SetFontIsVertical, TextOut i ugradnje fontova prikazane ovde deo su standardnog HotPDF Component API-ja za Delphi i C++Builder.