PDFlibPas crta japanski i kineski tekst niz stranicu. SetVerticalWritingMode uključuje okomito pisanje, obični pozivi DrawText zatim teku prema dolje, a GetVerticalWritingMode prijavljuje trenutno stanje. Prije nego što je ovo postojalo, okomito postavljanje teksta značilo je ručno smještanje svakog znaka i nadu da razmaci izgledaju ispravno
Okomito pisanje nije vodoravni tekst rotiran devedeset stupnjeva. Znakovi ostaju uspravni, pomak teče prema dolje umjesto postrance, a brojni znakovi potpuno mijenjaju oblik, što je dio koji razdvaja dokument koji se čita prirodno od onog koji japanski čitatelj odmah prepoznaje kao strojno proizveden
Što se mijenja unutar PDF-a
Tekst nacrtan na ovaj način prolazi kroz Type0 font u načinu okomitog pisanja noseći vlastite okomite metrike fonta. To je važno u dva smjera. Čitač pomiče svaki znak za udaljenost koju je njegov dizajner zamislio, a ne za jednoličan korak, pa stupac ima ritam za koji je tip pisma bio nacrtan. I kopiranje teksta vraća izvorne znakove, jer okomiti tijek i dalje je stvarni tekst s pravim preslikavanjem, a ne niz pozicioniranih glifova
Font koji ne nosi vlastite okomite metrike pomiče se za jedan em po znaku, što je što bi čitač radio prema zadanim postavkama. Ta pričuvna vrijednost vrijedi znati jer je to razlika koju ćete vidjeti kad se dokument ispravno renderira s pravim CJK fontom, a izgleda strojno razmaknut s latinskim fontom koji slučajno sadrži neku kanu
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;
Zašto zagrade izgledaju pogrešno u okomitom tekstu?
Zato što zagrada ima dva oblika, a samo jedan od njih pripada u stupac. Zagrade, oznaka dugog samoglasnika i male Kane crtaju se drukčije kad tekst teče niz stranicu: zagrada se rotira da sjedne uzduž stupca umjesto da leži poprijeko, a oznaka dugog samoglasnika postaje okomiti potez. Nacrtajte vodoravne oblike u okomitom stupcu i svaki od njih ležat će na boku
PDFlibPas uzima oblike iz vlastitog okomitog svojstva fonta, pa svaki font isporučuje ono što je njegov dizajner nacrtao, a ne zamjenu pogađanu iz znaka. Ta razlika važna je za ispravnost: tablica zamjena pogađana iz znakova točna je za uobičajene slučajeve, a pogrešna za fontove koji znak tretiraju drukčije, a font koji ne imenuje okomite oblike crta se točno kao i prije, umjesto da bude proveden kroz tablicu koju nikad nije tražio
GetVerticalTextHeight mjeri oblike koji će se doista nacrtati, pa se stupac čiji se znakovi mijenjaju i dalje ispravno mjeri. Mjerenje vodoravnih oblika i crtanje okomitih klasičan je izvor stupaca koji prelaze svoj okvir za nekoliko znakova
Crtanje jednog tijeka bez mijenjanja načina
DrawVerticalText crta jedan tijek okomito, uzimajući poziciju, ime fonta, veličinu i tekst, a ostavlja način pisanja na miru. Koristite ga za okomiti izuzetak unutar vodoravnog dokumenta, naslovnicu knjige, pečat, jedan stupac imena, gdje bi uključivanje i isključivanje globalnog načina oko svakog poziva bilo više stanja nego što zadatak zaslužuje
Vodoravni i okomiti oblici jednog fonta drže se interno odijeljeni, pa stranica može nositi oba bez da ijedan remeti drugi. Upravo to čini miješanu stranicu praktičnom: japanska stranica knjige s okomitim temeljnim tekstom i vodoravnim tekućim zaglavljima, ili kineska svjedodžba s okomitim naslovom iznad vodoravnih redaka detalja
// 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');
Dovođenje fonta u red prije svega ostalog
Okomito pisanje u potpunosti ovisi o fontu. CJK font s pravim okomitim metrikama i okomitim svojstvom proizvodi ispravan izlaz bez daljnjeg rada; font bez njih proizvodi uspravne znakove koji se pomiču jedan em u vrijeme, bez ikakvih promjena oblika. Ako okomiti tekst izgleda suptilno pogrešno, pregledajte font prije nego što pregledate kod
Ugradnja slijedi uobičajena pravila i uobičajene troškove. Pun CJK font je velik, pa podskupovi nisu opcionalni za dokumente koji idu bilo kamo: bilješke o optimizaciji veličine PDF datoteke i podskupovima fontova pokrivaju što očekivati, a prikaz ugradnje nedostajućih fontova u postojeći PDF pokriva slučaj popravka kad okomiti dokument stiže bez svojih fontova
Gdje okomiti tekst i dalje treba odluku o rasporedu od vas
Redoslijed stupaca. Japanski okomiti tekst teče s desna na lijevo po stupcu, pa dvostupčana stranica počinje s desnog ruba, i nijedna postavka načina pisanja ne može to zaključiti iz teksta. Isto vrijedi za redoslijed stranica u dokumentu koji se u cjelini čita s desna na lijevo, te za mjesto gdje sjede furigana, fusnote i naslovi slika
Ono što knjižnica jamči jest da je svaki tijek postavljen ispravno: pravi oblici, pravi pomaci, izdvojiv tekst. Gdje tijekovi idu na stranici jest problem rasporeda, a za dokumente sastavljene iz podataka prikaz pretraživanja teksta i nabrajanja elemenata stranice koristan je za naknadnu provjeru da je na stranici sletjelo ono što ste zamislili
PDFlibPas je izvorna Pascal PDF knjižnica za Delphi, C++Builder i Lazarus, a okomito CJK pisanje dio je API-ja za crtanje, a ne dodatak. Pogledajte stranicu proizvoda PDFlibPas za popis značajki teksta i fontova