Zpracování postscriptových souborů

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.

  • Tvorba PDF
  • Otočení PS vzhůru nohama
  • Jazyk PostScript

    Syntax

    • % – komentáře
    • %! – indikuje, že jde o PS soubor, obvykle následuje verze PS
    • %% – vkládá do PS další informace
    • argument 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 (hodnota true nebo false)
    • 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.

    Napsat komentář