PDFlibPas riše japonsko in kitajsko besedilo navzdol po strani. SetVerticalWritingMode vklopi navpično pisanje, običajni klici DrawText nato tečejo navzdol, GetVerticalWritingMode pa poroča o trenutnem stanju. Preden je to obstajalo, je navpično polaganje besedila pomenilo ročno postavljanje vsakega znaka in upanje, da bo razmik izgledal prav
Navpično pisanje ni vodoravno besedilo, zasukano za devetdeset stopinj. Znaki ostanejo pokončni, pomik teče navzdol namesto vstran, določeni znaki pa se popolnoma spremenijo obliko — to pa je del, ki ločuje dokument, ki se naravno bere, od tistega, ki ga japonski bralec takoj prepozna kot strojno izdelanega
Kaj se spremeni znotraj PDF
Tako narisano besedilo gre skozi pisavo Type0 v navpičnem zapisnem načinu, ki nosi lastne navpične metrike oblikovalca pisave. To je pomembno v obeh smereh. Bralec vsak znak pomakne za razdaljo, ki jo je zasnoval njen oblikovalec, in ne za enakomeren korak, tako ima stolpec ritem, za katerega je bila pisava narisana. In kopiranje besedila vnje vrne izvirne znake, ker je navpični tok še vedno pravo besedilo s pravilnim preslikavo in ne zaporedje postavljenih glasov
Pisava, ki ne nosi lastnih navpičnih metrik, pomika en em na znak, kar bi bralnik storil s privzeto vrednostjo. Ta povratna pot se splača poznati, ker je to razlika, ki jo boste videli, ko se dokument pravilno izriše s pravo pisavo CJK in mehansko razmaknjeno z latinično pisavo, ki slučajno vsebuje nekaj kana
var
Lib: TPDFlib;
H: Double;
begin
Lib := TPDFlib.Create;
try
Lib.SetOrigin(1);
Lib.AddTrueTypeFont('MS Mincho', 1); // 1 = embed the face
Lib.SetTextSize(12);
Lib.SetVerticalWritingMode(1); // ordinary DrawText now runs down
H := Lib.GetVerticalTextHeight('MS Mincho', 12, '第三章 保守点検');
Lib.DrawText(480, 72, '第三章 保守点検');
Lib.SetVerticalWritingMode(0); // back to horizontal
Lib.DrawText(72, 72 + H, 'Chapter 3');
Lib.SaveToFile('manual-ja.pdf');
finally
Lib.Free;
end;
end;
Zakaj oklepaji v navpičnem besedilu izgledajo narobe?
Ker ima oklepaj dve obliki in samo ena od njiju sodi v stolpec. Oklepaji, dolg samoglasnik in mali kana se pri risanju navzdol po strani rišejo drugače — oklepaj se zasuki, da sede vzdolž stolpca in ne leži prek njega, dolg samoglasnik pa postane navpična poteza. Narišite vodoravne oblike v navpičnem stolpcu in vsak od njih leži na boku
PDFlibPas vzame oblike iz lastne navpične lastnosti pisave, tako da vsak oblikovalec dobavi tisto, kar je narisal, in ne zamenjave, ugibane iz znaka. Ta razlika je pomembna za pravilnost: ugibana tabela zamenjav je pravilna za običajne primere in napačna za pisave, ki z znakom ravnajo drugače, pisava, ki ne poimenuje nobenih navpičnih oblik, pa se nariše natanko tako kot prej in ne silijo skozi tabelo, ki je nikoli ni zahtevala
GetVerticalTextHeight meri oblike, ki bodo dejansko narisane, zato je stolpec, katerega znaki spremenijo obliko, še vedno pravilno izmerjen. Merjenje vodoravnih oblik in risanje navpičnih je klasični vir stolpcev, ki presežejo svoje okvirje za nekaj znakov
Risanje enega toka brez spremembe načina
DrawVerticalText nariše en tok navpično, vzame položaj, ime pisave, velikost in besedilo, zapisni način pa pusti pri miru. Uporabite ga za navpično izjemo znotraj vodoravnega dokumenta — hrbetno oznako, žig, en sam stolpec imen — kjer vklop in izklop globalnega načina okoli vsakega klica predstavlja več stanja, kot naloga zasluži
Vodoravne in navpične oblike ene pisave se interno držijo narazen, tako da lahko stran nosi oboje, ne da bi druga drugo motila. To je tisto, kar naredi mešano stran praktično: stran japonske knjige z navpičnim telesom besedila in vodoravnimi tekočimi glavami ali kitajsko spričevalo z navpičnim naslovom nad vodoravnimi vrsticami podrobnosti
// One vertical run inside an otherwise horizontal page
Lib.DrawVerticalText(520, 96, 'MS Mincho', 14, '保守点検記録');
// The horizontal text around it is unaffected
Lib.DrawText(72, 96, 'Maintenance inspection record');
Pravilna pisava pred vsem drugim
Navpično pisanje v celoti temelji na pisavi. Pisava CJK s pravimi navpičnimi metrikami in navpično lastnostjo proizvede pravilen izhod brez nadaljnjega dela; pisava brez njih proizvede pokončne znake, ki se pomikajo en em naenkrat, brez kakršnihkoli sprememb oblik. Če navpično besedilo izgleda subtilno narobe, preglejte pisavo, preden pregledate kodo
Vdelava sledi običajnim pravilom in običajnim stroškom. Polna pisava CJK je velika, zato podmnožičenje ni izbirno za dokumente, ki gredo kamor koli — zapiski o optimizaciji velikosti datoteke PDF in podmnožičenju pisav obravnavajo, česa pričakovati, sprehod skozi vdelavo manjkajočih pisav v obstoječi PDF pa primer popravila, ko navpični dokument prispe brez svojih pisav
Kje navpično besedilo še vedno potrebuje vašo odločitev o postavitvi
Vrstni red stolpcev. Japonsko navpično besedilo teče po stolpcih od desne proti levi, zato se začne dvostolpčna stran pri desnem robu in nobena nastavitev zapisnega načina ne more sklepati o tem iz besedila. Enako velja za vrstni red strani v dokumentu, ki se kot celota bere od desne proti levi, in za to, kje sedijo furigana, sprotna opomba in napis slike
Knjižnica zagotavlja, da je vsak tok postavljen pravilno: pravilne oblike, pravilni pomiki, besedilo, ki ga je mogoče izvleči. Kje tokovi gredo po strani, je težava postavitve, za dokumente, sestavljene iz podatkov, pa je sprehod skozi iskanje besedila in naštevanje elementov strani uporaben za poznejše preverjanje, da je na strani pristalo tisto, kar ste želeli
PDFlibPas je izvorna Pascalova knjižnica PDF za Delphi, C++Builder in Lazarus, navpično pisanje CJK pa je del API-ja za risanje in ne dodatek — glejte stran izdelka PDFlibPas za seznam zmogljivosti besedila in pisav