LinuxovΘ noviny | ┌nor 1998 | ||||||
| |||||||
Na diskusnφm listu linux@muni.cz prob∞hla (mimo jinΘ) zmφnka o tom, jak za°φdit, aby bylo mo╛nΘ tisknout Φesky z Netscape. Sprßvn∞ tam bylo poznamenßno, ╛e °e╣enφ, p°i kterΘm se Ghostscriptu p°edlo╛φ pod nesprßvn²m jmΘnem upravenΘ fonty, nelze doporuΦit. V tomto ΦlßneΦku se pokusφm vysv∞tlit ╣ir╣φ souvislosti, kterΘ problematika tisku z UNIXu (a tedy i z Linuxu) p°inß╣φ. TakΘ zmφnφm podp∙rnΘ °e╣enφ tisku z Netscape podle pana Petra MachßΦka (za°azenφ filtru do tiskovΘ ·lohy), kterΘ se z°ejm∞ jevφ jako nejrozum∞j╣φ. V souΦasnΘ dob∞ asi neexistuje zcela ΦistΘ °e╣enφ tohoto problΘmu. NaznaΦφm rovn∞╛, jak bych si p°edstavoval °e╣enφ, kterΘ by bylo mo╛nΘ nazvat Φist²m a jakou prßci je k tomu pot°eba ud∞lat. ZaΦnu nejprve zevrubn²m ·vodem do problematiky. Vesm∞s v╣echny UNIXovΘ aplikace pou╛φvajφ pro tisk v grafickΘm re╛imu tiskßrny jazyk PostScript. Jednß se o jednoduch² postfixov² jazyk vyvinut² firmou Adobe http://www.adobe.com jako standard pro ·pln² grafick² popis ti╣t∞nΘ strany prost°ednictvφm jednoduch²ch grafick²ch operßtor∙. K≤d PostScriptu je Φiteln² text jako k≤d kterΘhokoli jinΘho programovacφho jazyka. Tento k≤d se stßvß p°i tisku z aplikace obsahem tiskovΘ ·lohy. ┌loha se p°edß p°φmo tiskßrn∞, pokud tato tiskßrna umφ PostScriptov² k≤d interpretovat, tj. obsahuje PostScriptov² RIP (Raster Image Procesor). ┌kolem RIPu je PostScriptovΘ instrukce zpracovat a prom∞nit v bitovou mapu strßnky nebo jin² popis strßnky, kter² p°φmo navazuje na technologii tisku. Vidφme, ╛e u tiskßren nebo osvitov²ch jednotek s velmi vysok²m rozli╣enφm je RIP vestav∞n² do za°φzenφ nutnostφ. Bitovß mapa ti╣t∞nΘ strany toti╛ obsahuje obrovskΘ mno╛stvφ dat, tak╛e je vhodnΘ, aby vznikla a╛ v pam∞ti tiskovΘho za°φzenφ. Z poΦφtaΦe proudφ do za°φzenφ podstatn∞ krat╣φ a transparentnφ PostScriptov² k≤d. Pokud (levn∞j╣φ) tiskßrna neobsahuje zabudovan² PostScriptov² RIP, je ·kolem tiskovΘho dΘmona lpd za°adit do cesty ·lohy filtr, kter² emuluje RIP p°φmo v poΦφtaΦi a p°evede ·lohu z PostScriptu do °eΦi, kterΘ rozumφ konkrΘtnφ cφlovß tiskßrna (nap°φklad do jazyka PCL). Tφmto filtrem b²vß v∞t╣inou Ghostscript, voln∞ dostupn² program. Takov² program musφ obsahovat jednotlivΘ ovladaΦe v╣ech pou╛it²ch typ∙ tiskßren. OvladaΦe tiskßren jsou v∞t╣inou souΦßstφ distribuce Ghostscriptu jako zdrojovΘ moduly. P°ed kompilacφ se dß nastavit, kterΘ ovladaΦe do v²slednΘho binßrnφho programu zahrnout a kterΘ ne. Binßrnφ program gs pak p°i spu╣t∞nφ s parametrem -h vypφ╣e, jakΘ ovladaΦe jsou v n∞m zakompilovßny. Starost o ovladaΦ tiskßrny je tedy v UNIXu v╛dy zßle╛itostφ Ghostscriptu nebo podobnΘho programu. Bohat² sortiment jazyk∙ tiskßren nenφ tedy starostφ operaΦnφho systΘmu a u╛ v∙bec ne aplikace, kterß tiskovou ·lohu generuje. Aplikace mß za ·kol vygenerovat transparentnφ PostScriptov² k≤d a tφm to pro ni konΦφ. Poznamenejme, ╛e lze pom∞rn∞ snadno konfigurovat tiskovΘho dΘmona tak, aby kontroloval prvnφ dva znaky tiskovΘ ·lohy. Jednß-li se o dvojici "procento, vyk°iΦnφk", pak to znamenß, ╛e ·loha obsahuje PostScriptov² k≤d a dΘmon za°adφ pro levn∞j╣φ tiskßrny (bez samostatnΘho RIPu) filtr realizovan² v∞t╣inou Ghostscriptem s p°φslu╣n²mi parametry. NezaΦφnß-li ·loha na uvedenΘ dva znaky, pak ji dΘmon p°edß tiskßrn∞ bez interpretace. Takovß konfigurace umo╛≥uje tisknout z UNIXu t°eba v textovΘm re╛imu tiskßrny jednoduchΘ textovΘ soubory nebo vyu╛φt p°φmo jazyka tiskßrny, pokud to nßhodou n∞jakß aplikace umo╛≥uje. Proto╛e UNIXovΘ tiskovΘ servery pou╛φvßme Φasto i pro ·lohy generovanΘ z jin²ch operaΦnφch systΘm∙, kterΘ se v∞t╣inou samy starajφ o ovladaΦe tiskßren a generujφ ·lohy p°φmo v jazyce tiskßren, je uvedenß konfigurace dΘmona vlastn∞ nutnostφ.
V²pis 1: Seznam vestav∞n²ch font∙ v ka╛dΘm RIPu PostScriptov² RIP pracuje s PostScriptov²mi fonty. Ka╛d² RIP mß b²t podle nßvrhu firmy Adobe intern∞ vybaven 35 p°esn∞ vyjmenovan²mi zßkladnφmi °ezy (viz v²pis Seznam vestav∞n²ch font∙ v ka╛dΘm RIPu). Pokud ·loha vyu╛φvß jinΘ fonty, je povinnostφ aplikace za°adit PostScriptov² popis t∞chto font∙ do tiskovΘ ·lohy p°ed prvnφm pou╛itφm fontu. TakovΘmu za°azenφ fontu do ·lohy °φkßme download. TextovΘ fonty ze zmφn∞nΘ sady standardnφch 35 font∙ majφ v²chozφ k≤dovßnφ podle Adobe definovanΘ v tzv. StandardEncoding vektoru. Toto k≤dovßnφ neobsahuje plnohodnotnΘ akcentovanΘ znaky, ale pouze anglickou abecedu spoleΦn∞ s jednotliv²mi akcenty v╣ech latinkou pφ╣φcφch jazyk∙. Akcenty jsou tedy zahrnuty pouze jako samostatnΘ znaky. Obsah font∙ k≤dovan²ch podle StandardEncoding vektoru m∙╛e Φtenß° najφt nap°φklad v knize (1) nebo dostupn∞ji v knize (2) v dodatku F. PostScriptovΘ fonty se distribuujφ v∞t╣inou ve formßtu Type 1. Specifikace tohoto formßtu (3) omezuje pou╛itφ PostScriptov²ch operßtor∙ k vytvo°enφ grafickΘ podoby znaku jen na n∞kterΘ. Obsahuje takΘ n∞kterß dal╣φ technickß omezenφ, t²kajφcφ se nap°φklad parametr∙ pou╛it²ch BeziΘrov²ch k°ivek. Cφlem v╣ech t∞chto omezenφ je mo╛nost definovat podmno╛inu PostScriptovΘho RIPu, kterß se specializuje jen na rastrovßnφ znak∙ Type 1 font∙, a p°itom pracuje velmi efektivn∞ a rychle. U╛ivatelΘ Windows znajφ takov² okle╣t∞n² RIP pod jmΘnem ATM (Adobe Type Manager). U╛ivatelΘ UNIXu a XFree86 jist∞ zjistili, ╛e tento specißlnφ RIP je nedφlnou souΦßstφ jejich grafickΘho rozhranφ. Type 1 formßt obsahuje navφc specifikaci tzv. hintingu. Tφm se myslφ soubor instrukcφ oznaΦujφcφch urΦitΘ Φßsti znak∙, kterΘ by m∞ly zvlß╣t∞ v nφzkΘm rozli╣enφ podlΘhat stejnΘmu zaokrouhlovßnφ rastrovacφho algoritmu. Cφlem je, aby nap°φklad serify jednotliv²ch pφsmen i po zaokrouhlenφ do nφzkΘho rozli╣enφ dopadly pro v╣echny znaky stejn∞. SpoleΦnost Microsoft nenavßzala na standard podle Adobe a pou╛ila jin² formßt font∙ - TrueType. Ten na rozdφl od BeziΘrov²ch kubik v Type 1 dovoluje k popisu obrys∙ pou╛φt jen BeziΘrovy kvadriky. Na druhΘ stran∞ mß TrueType mo╛nß pon∞kud bohat╣φ specifikaci hintingu. Vzhledem k tomu, ╛e obrysy znak∙ jsou v tomto formßtu popsßny k°ivkami odli╣nΘho °ßdu, dochßzφ zßkonit∞ p°i automatickΘ konverzi z jednoho formßtu do druhΘho ke zkreslenφ. Toho si musφme b²t v∞domi, pokud kupujeme nov² °ez. Byl-li °ez nativn∞ vyvinut v Type 1 formßtu, je po p°evodu do TrueType hor╣φ nejen obrys, ale i mo╛nosti hintingu jsou omezeny. K podobn²m komplikacφm dochßzφ i p°i p°evodu v opaΦnΘm sm∞ru. Pokud bychom p°evod n∞kolikrßt opakovali, m∙╛eme pφsmo rovnou vyhodit. Type 1 fonty se distribuujφ v souborech s p°φponou pfb (PostScript Font Binary) nebo pfa (PostScript Font ASCII). Variantu pfa bychom mohli p°irovnat v²stupu programu uuencode, zatφmco varianta pfb je binßrnφ a kompaktnφ. Soubory pfb v∞t╣inou instalujeme na disk, zatφmco formßt pfa je nutn² p°i zavedenφ fontu do tiskovΘ ·lohy jako download, proto╛e PostScriptov² k≤d musφ b²t textov². Ka╛dß aplikace tedy musφ um∞t p°evßd∞t z pfb do pfa, chce-li provozovat download. Programy z voln∞ ╣φ°enΘho balφku t1utils p°evßd∞jφ mezi uveden²mi formßty (t1ascii, t1binary) a navφc dokß╛φ de╣ifrovat k≤d fontu na jednotlivΘ PostScriptovΘ operßtory (t1disasm a t1asm). S fonty se dodßvajφ tΘ╛ metrickΘ ·daje afm (Adobe Font Metric). Na rozdφl od prodßvan²ch popis∙ tvar∙ (pfb, pfa) jsou ·daje afm v∞t╣inou voln∞ k dispozici na serverech firmy Adobe a jin²ch. Soubory afm jsou urΦeny pro aplikaci, kterß m∙╛e na zßklad∞ informacφ z nich generovat pon∞kud sofistikovan∞j╣φ PostScriptov² k≤d. P°edev╣φm se aplikace z afm dozvφ rozm∞ry znak∙ pot°ebnΘ pro v²poΦet sazby. TakΘ odtud p°eΦte ·daje o doporuΦen²ch hodnotßch pro kerningovΘ pßry a o ligaturßch. Znßm jedinou free aplikaci, kterß dokß╛e pln∞ vyu╛φt informace z afm a tou je TeX. TeX umφ dokonce vyu╛φt fonty podle StandardEncoding vektoru i v textech, kde se vyskytujφ akcentovanß pφsmena. V PostScriptovΘm k≤du je v mφst∞ v²skytu ka╛dΘho akcentovanΘho pφsmene automaticky za°azena sada instrukcφ, pomocφ kter²ch RIP sestavφ akcentovan² znak z jednotliv²ch element∙ (akcentu a pφsmene). TakovΘ chovßnφ je umo╛n∞no dφky koncepci tzv. virtußlnφch font∙. Proto TeX dokß╛e i v plnΘm ΦeskΘm textu vyu╛φt standardnφch 35 font∙ obsa╛en²ch v ka╛dΘm PostScriptovΘm RIPu. Nemusφ se tedy v tiskovΘ ·loze pou╛φt "download". Bohu╛el, jinΘ aplikace takovou schopnost nemajφ. Aplikace si m∙╛e v mezφch mo╛nostφ PostScriptovΘho fontu sama deklarovat pou╛itΘ k≤dovßnφ. Na PostScriptov² font lze toti╛ pohlφ╛et jen jako na sadu procedur pro vykreslenφ jednotliv²ch znak∙. Tyto procedury nejsou uspo°ßdanΘ. Uspo°ßdßnφm nßzv∙ t∞chto procedur do posloupnosti 256 jmen vznikß Encoding vektor. Implicitnφ Encoding vektor ka╛dΘho fontu m∙╛e aplikace zm∞nit. Fonty b∞╛n∞ obsahujφ vφce procedur, ne╛ je uvedeno ve StandardEncoding vektoru. Nap°φklad ve StandardEncoding vektoru nenajdeme pozici pro znak Θ, ale vesm∞s v╣echny fonty proceduru /ecaron, kterß vykreslφ znak Θ, obsahujφ. TextovΘ fonty ze sady vestav∞n²ch 35 font∙ ka╛dΘho RIPu obsahujφ procedury pro kresbu v╣ech znak∙ pou╛φvan²ch v zßpadoevropsk²ch jazycφch. Na v²pisu Zm∞na Encoding vektoru podle Netscape je p°edvedena Φßst PostScriptovΘho k≤du, kterß zavßdφ jeden ze standardnφch 35 font∙ Times-Roman a p°ed jeho pou╛itφm mu vnutφ k≤dovßnφ podle ISO8859-1 zm∞nou Encoding vektoru. P°esn∞ takov² k≤d pou╛φvß pro tisk program Netscape.
V²pis 2: Zm∞na Encoding vektoru podle Netscape Kßmen ·razu ale je, ╛e standardn∞ dodßvanΘ fonty, kterΘ najdeme v ka╛dΘm RIPu, neobsahujφ procedury pro vykreslenφ v╣ech znak∙ na╣φ abecedy. Nap°φklad proceduru /ccaron pro pφsmeno Φ bychom ve standardnφm fontu Times-Roman hledali marn∞. Netscape toto dilema ne°e╣φ a generuje v╛dy k≤d podle v²pisu Zm∞na Encoding vektoru podle Netscape bez zßvislosti na tom, jak² je zvolen Document Encoding. To je samoz°ejm∞ chyba programu. Pokud tedy mßme text WWW strßnky v ISO8859-2, pak p°i tisku dojde k pomφchßnφ k≤dovßnφ.
V²pis 3: Soubor Fontmap definujφcφ nßhradnφky Times-Roman PorozhlΘdn∞me se nynφ po free softwaru a podφvejme se, jakΘ fonty mßme k dispozici. S voln∞ ╣φ°en²m Ghostscriptem se dodßvß 32 nßhradnφk∙, kte°φ velmi dob°e nahrazujφ standardnφch 35 font∙, a p°itom jsou free a jsou v Type 1 formßtu. Mßme tedy k dispozici plnohodnotn² softwarov² RIP, jako RIPy dodßvanΘ v tiskov²ch za°φzenφch. V╣echny fonty, kterΘ "Ghostscriptov² RIP" mß z pohledu tiskovΘ ·lohy vestav∞ny, jsou uvedeny v konfiguraΦnφm souboru Fontmap. ╚ßst tohoto souboru, t²kajφcφ se rodiny font∙ Times-Roman, vidφme ve v²pisu Soubor Fontmap definujφcφ nßhradnφky Times-Roman. Kdy╛ je nap°φklad v PostScriptovΘm k≤du °eΦeno /Times-Roman findfond 10 scalefont setfontpou╛ije RIP vestav∞n² font Times-Roman, co╛ podle Fontmap znamenß, ╛e se pou╛ije soubor n021003l.pfb. Tento font mß v²chozφ k≤dovßnφ StandardEncoding a obsahuje v╣echny znaky umo╛≥ujφcφ p°edefinovat k≤dovßnφ podle ISO8859-1, jak bylo p°edvedeno ve v²pisu Zm∞na Encoding vektoru podle Netscape. Bohu╛el, pφsmeno Φ tam budeme hledat marn∞. PorozhlΘdn∞me se nynφ po Type 1 fontech, kterΘ jsou p°φmo k≤dovßny v ISO8859-2. To je k≤dovßnφ, kterΘ pou╛φvßme pro Φe╣tinu v UNIXu a tedy i v Linuxu. Bohu╛el k dne╣nφmu dni se mi poda°ilo najφt jedinou sadu takov²ch font∙, sice z ftp://ftp.osb.hu/pub/misc/fonts/local/latin-2. Jednß se o dφlo PΘtera So≤se a vytvo°il je pou╛itφm Fontographeru. Pravd∞podobn∞ konvertoval b∞╛nΘ fonty dodßvanΘ ve Windows ve formßtu TrueType a upravil pro n∞ akcenty. Balφk obsahuje obvyklΘ °ezy rodin Ariel, Times a Courier. Tyto fonty jsou z mnoha ohled∙ ╣patnΘ, ale je pot°eba konstatovat: dφky za n∞, mßme aspo≥ to. P°edev╣φm fonty majφ pom∞rn∞ ╣patn² hinting. V╣imneme si, ╛e v ni╛╣φm obrazovkovΘm rozli╣enφ (po instalaci font∙ do X serveru) se nap°φklad u fontu Ariel propadajφ pφsmena a, e pod °ßdek. Krom∞ toho majφ ·pln∞ ╣patn∞ deklarovßn sv∙j Encoding vektor. V╣echny nßzvy znak∙ v tomto vektoru jsou uvedeny podle ISO8859-1, aΦkoli font je v ISO8859-2. ProblΘm p°edvedu na p°φklad∞. Podle Encoding vektoru fontu (podφvejte se do n∞j pomocφ t1disasm) je na pozici 232 nßzev /egrave (\`e), co╛ je v souladu s ISO8859-1. Procedura /egrave ve fontu kupodivu vykreslφ znak Φ, co╛ je v souladu s ISO8859-2. Procedura /ccaron ve fontu v∙bec neexistuje. Pokud se aplikace opφrß p°i generovßnφ PostScriptovΘho k≤du o nßzvy procedur jednotliv²ch znak∙ fontu (co╛ p°i deklarovßnφ vlastnφho Encoding vektoru d∞lß), je ztracena a zmatena. Je to tedy velmi hrubß chyba fontu, ale paradoxn∞ dφky tΘto chyb∞ existuje cesta, jak tisknout Φesky z Netscape. Vφme toti╛, ╛e Netscape tiskne natvrdo v╛dy v ISO8859-1 i ΦeskΘ strßnky. Kdybychom tedy instalovali do Ghostscriptu mφsto standardnφho Times-Roman nap°φklad So≤s∙v ptm2____.pfb, pak by se chyba v Netscape s chybou ve fontu kompenzovaly a v²sledkem by byl sprßvn∞ vyti╣t∞n² Φesk² text. Toto °e╣enφ ov╣em za ╛ßdn²ch okolnostφ nedoporuΦuji. Nahrazenφm p∙vodnφch font∙ z Ghostscriptu So≤sov²mi bychom si zcela zniΦili "Ghostscriptov² RIP", kter² by od tΘ chvφle nespl≥oval oΦekßvanΘ specifikace pro standardnφch 35 font∙. Je sice pravda, ╛e bychom pak mohli vesele tisknout z Netscape, ale t°eba v╣echny tisky z TeXu, kterΘ se opφrajφ o vestav∞nΘ PostScriptovΘ fonty, by dopadly tragicky. Fonty pana So≤se navφc nelze trvale instalovat do RIP∙, kterΘ jsou zabudovßny p°φmo do tiskßren. Na takov²ch tiskßrnßch by tedy Netscape stßle tiskl Φe╣tinu ╣patn∞. Podstatn∞ lep╣φ °e╣enφ tisku z Netscape pochßzφ od pana Petra MachßΦka. Toto °e╣enφ se opφrß pouze o standardnφ fonty, kterΘ jsou v ka╛dΘm PostScriptovΘm RIPu. U╛ivatel napφ╣e do dialogovΘho boxu pro tisk mφsto p∙vodnφho lpr -Ptiskarna nov∞ csprint | lpr -Ptiskarna a m∙╛e se na to dφvat jako na tajuplnou sekvenci, kterou mu poradφ administrßtor a o kterΘ dßle nebude p°em²╣let. Od tΘto chvφle tiskne na v╣ech tiskßrnßch z Netscape Φesky. Popφ╣eme si, jak toto °e╣enφ pracuje. Filtr csprint (nebo jakkoli jinak nazvan²), kter² si zkopφrujeme z adresy http://www.cestina.cz/cestina/pocestovani/unix/WWW/filtr, zavede do generovanΘho k≤du definice Φesk²ch font∙. Tyto fonty jsou deklarovßny jako Type 3 PostScriptovΘ fonty a jednotlivΘ znaky se Φerpajφ z p∙vodnφch vestav∞n²ch font∙. AkcentovanΘ znaky jsou definovßny jako kompozity. Nev²hodou tohoto postupu je skuteΦnost, ╛e pro tisk se do k≤du zavßdφ zbyteΦn∞ velkß hlaviΦka (230 kB) a prßce RIPu se zpomalφ. Na druhΘ stran∞ v∞t╣inou z Netscape tiskneme krßtkΘ texty bez nßroku na kvalitu (program nepodporuje ani kerning ani vyrovnßnφ podle pravΘho okraje). Z tohoto pohledu se °e╣enφ jevφ jako dostaΦujφcφ. Filtr vytvo°en² panem MachßΦkem by se dal je╣t∞ mφrn∞ zjednodu╣it. V╣echny znaky, kterΘ mß Φe╣tina spoleΦnΘ se sadou ISO8859-1 lze pou╛φt p°φmo a nikoli jako kompozit. Tak╛e /eacute (Θ) nemusφ RIP sestavovat jako /e a /acute, ale staΦφ pou╛φt p∙vodnφ /eacute. Existuje je╣t∞ jedno °e╣enφ, kterΘ je kombinacφ obou p°edchozφch. Pou╛ije se filtr, kter² mφsto Type 3 kompozitnφch font∙ zavede Type 1 fonty pana So≤se jako download. Mo╛nß se tφm trochu zrychlφ prßce RIPu, ale velikost zßhlavφ k≤du nezmen╣φme. Tak╛e takovΘ °e╣enφ je zcela srovnatelnΘ s pou╛itφm filtru podle pana MachßΦka. Vidφme, ╛e popsanß °e╣enφ jsou provizornφ. Lep╣φ Φasy nastanou, a╛ budou spln∞ny dv∞ podmφnky:
Rovn∞╛ by m∞la existovat souvislost mezi obrazovkov²mi fonty, kterΘ
u╛ivatel zvolφ pro prohlφ╛enφ textu a tiskov²mi fonty. Takovß
souvislost zatφm neexistuje. Je tedy vid∞t, ╛e problematika tisku je
ve stßvajφcφ verzi Netscape hodn∞ odbytß. V∞°φm, ╛e uvoln∞nφ
zdrojov²ch text∙ Netscape p°isp∞je k rychlΘ nßprav∞ t∞chto nedostatk∙.
|