Postupně se snažím přenést všechny články ze staré verze www stránek, dnes sem přidávám další o PostScriptu. Pro spoustu lidí je PostScript (.ps) neznámý a nevyužitelný formát dokumentu, který prostě MS Word neumí otevřít, pro jiné lidi je to zase naprosto běžný formát pro přenos informací. Pak se taky najdou blázni, co berou PostScript jako programovací jazyk :-). V článku jsem si sepsal hlavně příkazy a jejich parametry pro zpracovnání postscriptu.
- Syntax
- Encapsulated PostScript – EPS
- Písma
- Příklady převodu dokumentů z PostScriptu do…
- Převod dokumentů do PostScriptu
- Převod obrázků do eps
Jazyk PostScript
Syntax
%
– komentáře%!
– indikuje, že jde o PS soubor, obvykle následuje verze PS%%
– vkládá do PS další informaceargument argument ... operátor výsledek
Argumentů může být libovolný počet (je-li nulový, uvádí se znak “-“), pak následuje operátor (instrukční symbol) a označení výsledku. Tím bývá symbol (název) proměnné nebo znak “-” označující, že se žádný výsledek neukládá. Není-li uložení výsledku určeno, ukládá se na vrchol zásobníku. Z následujících tří příkladů má první dva argumenty a pouze ukládá výsledek na zásobník, druhý nemá žádný argument a vrací hodnotu do proměnné a třetí s jedním argumentem žádnou hodnotu nevrací:
10 20 add - save stav tloustka setlinewidth -
Textové řetězce se (poněkud neobvykle) ohraničují závorkami (lze použít také hexadecimální formát v lomených závorkách). PS podporuje také pole – ta se uzavírají do hranatých závorek (např. [10 2 51]).
Proměnné i nové operátory (funkce) se definují podobným způsobem – pomocí operátoru def. Např. tento příklad vytvoří proměnnou a, které přiřadí hodnotu 10 (lomítko zajištuje, aby se vytvořila proměnná a vložila se na vrchol zásobníku slovníků – kdyby se nepoužilo, mohla by se změnit hodnota proměnné z některého slovníku v zásobníku):
/a 10 def
Obdobně se definuje také nová funkce; pro ohraničení těla funkce se používají složené závorky. Následující dva příklady dělají skoro totéž – definují funkci druhé mocniny. První se však vyhodnocuje v okamžiku volání, zatímco druhý už při definici (tím se zvýší rychlost, ale při předefinování použitých operátorů se změny již nepromítnou):
/nadruhou {dup mul} def /nadruhou {dup mul} bind def
Funkce, které vrací hodnotu, ji ukládají na vrchol zásobníku, takže ji lze později snadno použít.
Encapsulated PostScript – EPS
Samotný PS nelze vkládat do jiných dokumentů, prazuje totiž s celou stránkou a nelze ho omezit…
Řešením je použít EPS, který používá komntářové řádky pro vkládání dalších informací. Nejdůležitější je BoundingBox, který určuje oblast na strénce, kde se obraz nachází:
%%BoundingBox: 55 20 100 210
EPS smí navíc obsahovat pouze jedinou stránku a nesmí obsahovat operátory s globálním efektem. Musí se také přizpůsobit úvodní řádek s identifikací verze PS.
Písma
Při volbě fontu pro vykreslování textu nejprve pomocí operátoru findfont vybereme požadovaný font, nastavíme velikost písma a pak s ním dále pracujeme. Předpokládejme, že máme k dispozici zmiňovaný font Times-Roman a chceme vykreslit text o velikosti písma 12 bodů. Posloupnost PS příkazů by vypadala takto:
/Times-Roman findfont 12 scalefont setfont newpath 0 200 moveto (Tiskni tento text) show
Příklady převodu dokumentů z PostScriptu do…
Převod PS do obrázku ve formátu jpeg o rozlišení 40dpi a velikost 500x500px:
gs -sDEVICE=jpeg -g500x500 -r40x40 -dBATCH -dNOPAUSE \ -sOutputFile=soubor.jpg soubor.ps
Pokud chceme jpeg ve stupních šedi, tak jako DEVICE uvedeme jpeggray
Převod PS do PDF:
gs -sDEVICE=pdfwrite -dBATCH -dNOPAUSE -sOutputFile=soubor.pdf soubor.ps
Příprava dat pro tiskárnu:
gs -sDEVICE=DJ6xx -r300x300 -sPAPERSIZE=a4 -sOuputFile=soubor.prn \ -dBATCH -dNOPAUSE soubor.ps
Výstup bude pro tiskárnu HP DeskJet 6xx, papír formátu a4 a rozlišení 300dpi.
V případě, že máme program generující PS a chceme to hned tisknout můžeme použít následující způsob:
generator | gs -sDEVICE=DJ6xx -r300x300 -sPAPERSIZE=a4 \ -sOutputFile=\|lpr -
Převod dokumentů do PostScriptu
Převod textu v kodovani iso8859-2 do PS:
a2ps --column=1 --portrait --no-header --borders=no -P display \ --encoding=latin2 -o vystup.ps vstup.txt
Převod všech textových souborů v adresáří do postscriptu:
for i in *; do \ a2ps --column=1 --portrait --no-header --borders=no -P display --encoding=latin2 \ -o `basename $i txt`ps $i; \ done
Vice stranek na list:
psnup -4 dokument.ps > vystup.ps
vloží 4 stránky na list.
Převod obrázků do eps
Pokud potřebujete převést obrázek do eps formátu, stačí použít utilitu convert z balíčku ImageMagick.
Použití:
convert zdroj.jpg cil.eps
Tvorba PDF
ps2pdf umí převést ps soubor do pdf, je to nadstavba ghostscriptu
ps2pdf – PDF 1.2, Acrobat 3
ps2pdf12 – PDF 1.2, Acrobat 3
ps2pdf13 – PDF 1.3, Acrobat 4
ps2pdf14 – PDF 1.4, Acrobat 5
u ps2pdf lze nastavit verzi PDF pomoci parametru -dCompatibilityLevel
(napriklad ps2pdf -dCompatibilityLevel=1.4 soubor.ps
)
Parametr -dPDFSETTINGS=profil
kde profil je:
/default
– zakladni nastaveni, neni prilis usporny co do/screen
– horsi kvalita, datove uspornej/printer
– lepsi kvalita, narocneji na data/prepress
– nejlepsi kvalita, pro profi tiskarny, dost narocny na data
Když nevyhovuje profil, tak můžeme upravit přímo hodnoty jednotlivých parametrů, kde uvedeme -d
(pro řetězec -s
), název parametru, znak =
a hodnotu. Příklad(natsavení rozlišení pro plnobarevné obrázky):
ps2pdf -dColorImageResolution=150 soubor.ps
Použitelných parametrůje velmi odně, některé zajímavé:
ProcessColorModel
– barevný model, např./DeviceRGB
nebo/DeviceGray
ColorImageDownsampleType
– způsob převzorkování barevných obrázků, např./Average
nebo/Bicubic
EmbedAllFonts
– určuje, zda vložit všechny použité fonty (hodnotatrue
nebofalse
)SubsetFonts
– určuje, zda vkládat z fontů pouze podmnožiny (pouze použité znaky)DoThumbnails
– určuje, zda vytvořit náhledy stránek
Nepříjemné je, že ačkoliv Ghostscript všechny parametry akceptuje, některé nefungují vůbec, jiné mají odlišné chování. Například DoThumbnails zatím není implementováno, LZWEncodePages nemůže používat algoritmus LZW z patentových důvodů (a proto se buď používá jiná komprese, nebo žádná – záleží na dalších parametrech) apod.
Otočení vzhůru nohama
pstops '0U(1w,1h)' in.ps > out.ps
Tento text je výtahem ze seriálu uveřejněnho na www.linuxzone.cz, mám to pro studijní účely. Doufám, že se někoho nedotkne to, že jsem to zveřejnil na své stránce…
vynikající je také seriál Grafika v UNIXu, který vycházel na www.root.cz, ke stažení je též ve formátu pdf.
Comments are closed.