Naprej Nazaj Vsebina

7. Tiskanje

Pri tiskanju lahko naletimo na različne situacije:

Zadnja možnost ni predmet obravnave tega spisa.

7.1 Tiskalniki, ki podpirajo ISO Latin 2

Nekaj novejših tiskalnikov že neposredno podpira kodni razpored ISO Latin 2. Med njimi so

Vse, kar morate storiti, je izbrati pravilno kodno stran v tiskalniku. Ubežna sekvenca za tiskalnike Hewlett-Packard (PCL) in Epson (ESC/P2) so naslednje
PCL

Tole menda deluje:


\033(2N\033(s0p12h0s0b4099T

ESC/P2

Z ukazom ESC ( t prepišemo kodno tabelo ISO 8859-2 v drugo tabelo tiskalnika; zatem z ukazom ESC t izberemo drugo tabelo tiskalnika (strani C-73 in C-77 v ,,Epson ESC/P Reference Manual``, december 1997):


\033(t\003\000\002\177\002\033t\002

Oznaka \033 je osmiška koda znaka Escape.

Eden od načinov, kako z /etc/printcap prilagodimo okolje za tiskanje na tak tiskalnik, je podrobneje opisan v razdelku Tiskalniki, ki podpirajo kak drug nabor z našimi znaki.

7.2 Tiskalniki, ki podpirajo kak drug nabor z našimi znaki

Če tiskalnik podpira kak drug nabor z našimi znaki (ne dolgo nazaj je bila ustaljena praksa, da je bil ROM v tiskalnikih zamenjan z EPROM, v njem pa švedski znaki zamenjani z znaki po JUS I.B1.002), lahko s primerno nastavitvijo v /etc/printcap še vedno tiskamo spise, kodirane po ISO Latin 2.

Primerno moramo dopolniti datoteko /etc/printcap. Za zgled si oglejmo tiskalnik Epson, ki ima znake po JUS I.B1.002 na mestu švedskega nabora.


lp|ascii|epson|Epson LQ-850:\
        :lp=/dev/lp1:\
        :sd=/usr/spool/lpd/epson:\
        :lf=/usr/spool/lpd/ERRORLOG:\
        :mx#0:\
        :sh:
jus|Epson LQ-850 z znaki JUS I.B1.002:\
        :lp=/dev/null:\
        :sd=/usr/spool/lpd/jus:\
        :if=/usr/spool/lpd/jus_filter:\
        :lf=/usr/spool/lpd/ERRORLOG:\
        :mx#0:\
        :sh:
latin2|text|Epson LQ-850 z znaki ISO Latin 2:\
        :lp=/dev/null:\
        :sd=/usr/spool/lpd/latin2:\
        :if=/usr/spool/lpd/latin2_filter:\
        :lf=/usr/spool/lpd/ERRORLOG:\
        :mx#0:\
        :sh:

Zgled ima tri tiskalniške vrste. Prva je dejanski tiskalnik z ameriškim (ASCII) naborom znakov. Druga uporablja filter /usr/spool/lpd/jus_filter:


#!/bin/sh
/usr/spool/lpd/jus_epson | lpr -Pascii

Datoteko torej precedimo skozi filter /usr/spool/lpd/jus_epson in jo postavimo v prvo tiskalniško vrsto. Filter jus_epson ne napravi drugega, kot da na začetku doda kodo za preklop v švedski nabor, prepiše datoteko z vhoda na izhod, in na koncu doda kodo za preklop nazaj v ameriški nabor. To je tudi edini del programja, ki je odvisen od vrste tiskalnika:
#!/bin/sh
# Tiskanje besedil kodiranih po JUS I.B1.002 na tiskalnik Epson LQ
#
# Izberemo slovenski (švedski) nabor
/bin/echo -ne "\033R\005\c"
# Izpišemo dokument
cat
# Izberemo ameriški nabor
/bin/echo -ne "\033R\000\c"

Tretja vrsta uporablja podoben filter kot druga, le da ta najprej pretvori besedilo iz Latin 2 v JUS, zatem uporabi že opisani filter za to, da doda na začetku in na koncu potrebno kodo za tiskalnik, in končno táko datoteko postavi v prvo vrsto.


#!/bin/sh
/usr/local/bin/recode --force latin2:yu | \
    /usr/spool/lpd/jus_epson | lpr -Pascii

Zgled predpostavlja, da je pot do programa recode /usr/local/bin/recode. Izbiro --force moramo uporabiti, ker je preslikava neobrnljiva -- v Latin 2 imamo tako šumnike kot zavite oklepaje, v JUS pa samo še prve.

Za ta zgled smo morali v imeniku /usr/spool/lpd ustvariti tri podimenike: /usr/spool/lpd/epson, /usr/spool/lpd/jus in /usr/spool/lpd/latin2.

Tiskanje gre zdaj tako:

  1. Brez eksplicitne izbire vrste, ali pa z izbiro -Pepson ali -Pascii se datoteka odtisne kot ASCII:
    lpr datoteka
  2. Z izbiro -Pjus se datoteka odtisne kot besedilo, kodirano po JUS I.B1.002:
    lpr -Pjus datoteka
  3. Z izbiro -Platin2 ali -Ptext se datoteka odtisne kot besedilo, kodirano po ISO Latin 2:
    lpr -Platin2 datoteka

7.3 Tiskalniki, ki podpirajo kak drug nabor z našimi znaki II

(Matjaž Terpin < matjaz.terpin@comcom.si>, Message-id: <Pine.LNX.3.96.980709095750.24607B-400000@guru.comcom.si>)

Matjaž Terpin < matjaz.terpin@comcom.si> je predlagal imenitno izboljšavo pravkar opisanega postopka, pri katerem lahko tiskamo naše znake in oglate in zavite oklepaje. Srž njegovega predloga je filter, ki pred vsakim našim znakom preklopi v švedski nabor, takoj za njim pa spet nazaj v ASCII.

Datoteka /etc/printcap je v tem primeru takšna:


# /etc/printcap
lp|raw|yu:\
       :lp=/dev/lp1:\
       :sd=/var/spool/lpd/lp:\
       :lf=/var/spool/lpd/ERRORLOG:\
       :mx#0:\
       :sh:
lat2:\
       :lp=/dev/null:\
       :if=/etc/lp/lat2.filter:\
       :sd=/var/spool/lpd/lat2:\
       :lf=/var/spool/lpd/ERRORLOG:\
       :mx#0:\
       :sh:

Filter /etc/lp/lat2.filter precedi besedilo skozi naslednje sito, /etc/lp/lat2.switch, in ga postavi v vrsto lp:


#!/bin/sh
# /etc/lp/lat2.filter

/etc/lp/lat2.switch | lpr -Plp

,,Meso`` postopka je v datoteki /etc/lp/lat2.switch:


#!/bin/sh
#/etc/lp/lat2.switch

echo -ne "\033R0"

sed -e "s/č/`echo -ne "\033R5\~\033R0"`/g" \
 -e "s/Č/`echo -ne "\033R5\^\033R0"`/g" \
 -e "s/š/`echo -ne "\033R5\{\033R0"`/g" \
 -e "s/Š/`echo -ne "\033R5\[\033R0"`/g" \
 -e "s/ž/`echo -ne "\033R5\140\033R0"`/g" \
 -e "s/Ž/`echo -ne "\033R5\@\033R0"`/g" \
 -e "s/ć/`echo -ne "\033R5\}\033R0"`/g" \
 -e "s/Ć/`echo -ne "\033R5\]\033R0"`/g" \
 -e "s/đ/`echo -ne "\033R5\|\033R0"`/g" \
 -e "s/Đ/`echo -ne "\033R5\\\\033R0"`/g" 

echo -ne "\033R5"

Matjaž pravi še: sed slabo prebavi ``echo -ne "\000"'', zato uporabljam kar znak 0 (ničlo), saj je tiskalnik (NEC pinwriter P7) zadovoljen tudi s tem.

7.4 Tiskalniki PostScript

``Naravni'' kodni nabor v PostScriptu je Adobe Standard Encoding. Naših črk ne pozna. Pa ne le naših, tudi mnogih drugih črk ne pozna, in pravzaprav sploh nima tovrstnih ambicij. Namesto tega je ASCII razširjen z gradniki sestavljenih znakov: strešica, ostrivec, diereza, sedij itd. -- vsi so tam. Jezik PostScript pa omogoča definiranje sestavljenih znakov. Vse skupaj je čakalo samo še nekoga, ki bo definiral sestavljene znake za kodni nabor ISO Latin 2. Ta nekdo je bil Juliusz Chroboczek, ki je napisal paket ogonkify.

Filtra a2ps in GNU enscript sta bila napisana z namenom, da rešita za naše kraje neobičajno zagato: kako odtisniti čisto običajno besedilo na tiskalnik, ki razume edino PostScript. Eden in drugi postavita stran v PostScriptu z danim besedilom in jo pošljeta na tiskalnik. Fleksibilnost PostScripta omogoča tudi transformacije (npr. pomanjšave) ali poudarjanje sintakse pri tiskanju programskih izpisov. Oba podpirata nabor ISO Latin 2.

http://www.dcs.ed.ac.uk/home/jec/programs/ogonkify/
http://www-inf.enst.fr/~demaille/a2ps/
http://www.iki.fi/~mtr/genscript/
ftp://ftp.arnes.si/gnu/enscript/enscript-1.6.1.tar.gz

ogonkify

Ogonkify je filter za izpise v PostScriptu, in omogoča pravilen odtis črk tudi v jezikih, ki ne uporabljajo nabora ISO Latin 1. Ker je filter, je ravno korak prepozen, da bi lahko počel to elegantno, ampak mora prežvečiti kakršnokoli grdobijo pač izpljune program korak pred njim in iz dobljenega izdelati lep odtis. Programi pa izdelujejo datoteke PostScript vsak malo drugače, kar filtru ``ogonkify'' oteži delo. Zaenkrat podprti formati izpisa PostScript so: NCSA Mosaic, Netscape Navigator, StarOffice, Applixware in XFig.

Ogonkify za delovanje potrebuje Perl. Ko je nameščen, ogonkify uporabimo takole za odtis spletnega sestavka, shranjenega iz Navigatorja:

ogonkify -AT -N netscape.ps | lpr

GNU enscript

Če GNU enscript še ni nameščen, ga namestimo po navodilih, ki so priložena programu. Poleg njega potrebujemo še vsaj eno pisavo z vsemi našimi znaki, zapisan v obliki Type 1. Primeren je npr. IBM Courier, ki je prosto dostopen in se distribuira z X Window System, programom ghostscript ipd. Če nismo prepričani, ali ga imamo že nameščenega, poženemo:

find / -name cour.pf[ab]

V osebno (~/.enscriptrc) ali skupno konfiguracijsko datoteko (navadno /usr/local/etc/enscript.cfg ali /usr/local/etc/enscriptsite.cfg) dodamo pravilno pot do datotek s pisavami. Poleg tega potrebuje GNU enscript v vsakem imeniku s pisavami še datoteko z imenom font.map, ki vsebuje preslikavo med imeni pisav in datotekami, kjer so shranjene. Ustvarimo jo z ukazom mkafmmap.

Primer konfiguracijske datoteke:


...
#  Kje hranimo pisave PostScript?
AFMPath: /usr/lib/X11/fonts/Type1:/usr/local/lib/ghostscript/fonts
...
#  Privzeti način kodiranja:
DefaultEncoding: latin2
...
#  Privzeti format papirja:
DefaultMedia: A4
...
#  lpd izbira tiskalniške vrste z -P...
QueueParam: -P
...
#  Za tiskanje uporabljamo ukaz lpr, ne lp
Spooler: lpr

Ko je vse potrebno nastavljeno, odtisnemo besedilo enostavno z ukazom

enscript datoteka

a2ps

Z izdajo 4.7.21 je Akim Demaille v a2ps vgradil mehanizem za sestavljene znake, ki ga je Juliusz Chroboczek uporabil v filtru ogonkify.

Našim krajem prilagodimo a2ps z majčkeno spremembo nastavitvene datoteke. Sistemsko nastavitveno datoteko najdemo navadno kot /usr/etc/a2ps.cfg, /usr/local/etc/a2ps.cfg ali kaj podobnega; osebna se imenuje ~/.a2psrc.


...
# Default encoding
Options: --encoding=latin2

# Default media
Options: --media=A4
...


Naprej Nazaj Vsebina