Rozdział 24.
Ghostscript i Ghostview
Tim Parker
W tym rozdziale:
Skąd można wziąć Ghostscript?
Pakiet Ghostscript
Ghostview
PostScript to popularny język opisu strony (ang. Page Description Language, PDL), używany przez wiele aplikacji. Jedną z jego podstawowych zalet jest fakt, że plik w formacie postscriptowym może zostać wydrukowany na każdej drukarce obsługującej go, bez względu na system operacyjny czy model drukarki. Pozwala to na stworzenie jednej wersji pliku zamiast tworzenia oddzielnej wersji dla drukarek HP LaserJet, drugiej dla urządzeń Epson itd.
Z punktu widzenia użytkownika Linuxa, głównym problemem jest fakt, że nazwa PostScript została zastrzeżona przez firmę Adobe Systems, Inc. Z tego powodu wersja tego języka dla Linuxa nazywa się Ghostscript. Jak można się domyślić, język ten jest prawie identyczny z językiem PostScript, ale jego dystrybucja nie jest ograniczona prawami autorskimi, związanymi z tym opłatami itd. W zasadzie Ghostscript również jest objęty prawem autorskim jego twórców, ale postanowili oni zezwolić na rozprowadzanie go na warunkach licencji GNU, dzięki czemu jest dostępny dla wszystkich użytkowników.
|
Właścicielem praw autorskich do języka Ghostscript jest firma Aladdin Enterprises. Jeśli interesuje Cię uzyskanie licencji na programy użytkowe, powinieneś się z nią skontaktować; podajemy więc adres:
Aladdin Enterprises, P.O. Box 60264, Palo Alto, CA 94306; |
Większość aplikacji potrafi generować pliki w formacie Ghostscript. Program o nazwie Ghostview pozwala je oglądać, dzięki czemu możesz ocenić efekty swojej pracy przed ich wydrukowaniem. Ghostscript to w zasadzie cały pakiet programów. W tym rozdziale zajmiemy się tylko interpreterem języka PostScript oraz funkcjami języka C, które mogą zostać dołączone do kodu tworzonego programu wzbogacając go o możliwość generowania plików postscriptowych.
Skąd można wziąć Ghostscript?
Ghostscript jest dostarczany z większością dystrybucji Linuxa. Jest częścią zestawu dysków AP (ang. applications). Jeśli zdecydowałeś się zainstalować ten zestaw (większość użytkowników instaluje go), Ghostscript jest gotowy do użycia w Twoim systemie. Jeśli nie instalowałeś oprogramowania z zestawu AP, możesz zrobić to w każdej chwili, wybierając z oprogramowania zawartego w tym zestawie tylko pakiet Ghostscript.
Jeśli nie wiesz, czy Ghostscript został zainstalowany, musisz poszukać odpowiednich plików wykonywalnych i bibliotek ręcznie, ponieważ różne wersje Linuxa instalują je do różnych katalogów. Najłatwiej poszukać pliku wykonywalnego o nazwie gs za pomocą polecenia find:
find / -name gs -print
Jeśli został on znaleziony (najprawdopodobniej w katalogu /usr/bin), oznacza to, że pakiet Ghostscript najprawdopodobniej został zainstalowany. Liczba plików instalowanych z pakietem Ghostscript różni się w zależności od wersji oprogramowania, ale działająca instalacja powinna na pewno zawierać pliki:
bdftops.ps
decrypt.ps
font2c.ps
gs_dbt_e.ps
gs_dps1.ps
gs_fonts.ps
gs_init.ps
gs_lev2.ps
gs_statd.ps
gs_sym_e.ps
gs_type0.ps
gslp.ps
impath.ps
landscap.ps
level1.ps
prfont.ps
ps2ascii.ps
ps2epsi.ps
ps2image.ps
pstoppm.ps
quit.ps
showpage.ps
type1ops.ps
wrfont.ps
uglyr.ps
Fontmap
Zwykle pliki te przechowywane są w katalogu /usr/lib/ghostscript lub /usr/share/ ghostscript. Czasem również do nazwy katalogu dołączany jest jeszcze numer wersji, co dodatkowo komplikuje problem. Również w tym przypadku najłatwiej odnaleźć potrzebne pliki poleceniem find, np.
find / -name gs_statd.ps -print
W powyższym przykładzie polecenie find będzie próbowało odnaleźć plik gs_statd.ps, który powinien być częścią każdej instalacji Ghostscript. Znajduje się on przeważnie w katalogu /usr/lib/ghostscript, ale w niektórych systemach może być przechowywany w katalogu /usr/share. Oto wynik działania podanego wcześniej polecenia w systemie Caldera OpenLinux:
[root@linux /root]# find / -name gs_statd.ps -print
/usr/share/ghostscript/3.33/gs_statd.ps
W tym przypadku pliki pakietu Ghostscript znajdują się w katalogu /usr/share/ ghostscript/3.33. Aby sprawdzić, czy wszystkie potrzebne pliki są obecne w systemie, obejrzyj zawartość katalogu, w którym znajduje się plik odnaleziony przez polecenie find. Jeśli Ghostscript jest zainstalowany, powinieneś uzyskać efekt jak na rysunku 24.1
Rysunek 24.1. Zawartość katalogu pakietu Ghostscript |
|
Wraz z pakietem Ghostscript dostarczana jest również spora ilość czcionek. Są one zwykle umieszczane w jednym z podkatalogów głównego katalogu pakietu, na przykład
/usr/share/ghostscript/fonts.
Jeśli Twoja dystrybucja nie zawierała pakietu Ghostscript, możesz go załadować z każdej ze stron WWW i węzłów FTP udostępniających Linuxa. Ich adresy możesz znaleźć m.in. w rozdziale 2. „Rodzaje Linuxa”. Pakiet Ghostscript rozprowadzany jest również przez firmę Aladdin Enterprises.
Pakiet Ghostscript
Głównym programem pakietu Ghostscript jest gs, interpreter języka Ghostscript. Wczytuje on zadane pliki i wyświetla w oknie systemu X efekt ich sformatowania. Uruchamianie programu gs w trybie tekstowym nie ma większego sensu, ponieważ do obejrzenia efektów i tak niezbędne jest okno graficzne.
Aby wyświetlić w oknie X sformatowany plik Ghostscript, wydaj polecenie gs, podając jako parametr nazwę pliku, który chcesz obejrzeć (pliki Ghostscript mają zwykle rozszerzenie .ps):
gs plik1.ps
Możesz podać więcej niż jedną nazwę pliku, wówczas będą one wyświetlane kolejno, jeden po drugim. Po wydaniu takiego polecenia pojawi się informacja Initializing..., po której wyświetlona zostanie spora ilość komunikatów pochodzących od interpretera języka Ghostscript, a następnie otwarte zostanie okno zawierające wynik przetworzenia pliku postscriptowego. Na rysunku 24.2 przedstawione są komunikaty wyświetlane po wydaniu polecenia gs, natomiast na rysunku 24.3 - okno zawierające sformatowany dokument.
Rysunek 24.2. Po wydaniu polecenia gs wyświetlanych jest kilka informacji o programie |
|
Jeśli chcesz zapobiec wyświetlaniu komunikatów przez interpreter języka Ghostscript (jak na rysunku 24.2), możesz użyć opcji -q (ang. quiet) - wówczas wyświetlane będą tylko najważniejsze informacje.
Polecenie gs opisane jest na stronach man, które niestety są napisane w dość nieprzystępny sposób. Możesz również uzyskać odpowiednie informacje, wydając polecenie gs -h lub gs -?. Ponieważ wyświetlana jest dość spora ilość danych, skieruj wyjście tego polecenia do pliku lub użyj programu more, np.:
gs -h | more
Rezultat wydania tego polecenia przedstawiony jest rysunku 24.4. Jeśli chcesz obejrzeć następną stronę, wciśnij spację. Aby opuścić program more, wciśnij q lub Control+C.
Rysunek 24.3. Ghostscript pozwala na wyświetlenie w oknie X sformatowanego dokumentu postscriptowego |
|
Rysunek 24.4. Do wyświetlenia informacji o programie gs warto wykorzystać polecenie more |
|
Konfigurowanie pakietu Ghostscript do współpracy z X
Niektóre (ale niestety nie wszystkie) wersje Linuxa są tak skonfigurowane, że system X potrafi od razu obsługiwać wyświetlanie okien zawierających efekty działania interpretera języka Ghostscript. Ghostscript używa zasobów systemu X zdefiniowanych w pliku .Xdefaults, w klasie Ghostscript. Plik .Xdefaults powinien zawierać co najmniej trzy wpisy dotyczące interpretera Ghostscript:
Ghostscript*geometry: -0+0
Ghostscript*xResolution 72
Ghostscript*yResolution 72
Jeśli ich tam nie ma, użyj edytora tekstu i wprowadź je, po czym zrestartuj serwer X albo przeładuj zasoby systemowe. Można to zrobić (jeśli bieżącym katalogiem jest katalog domowy) wydając polecenie:
xrdb -merge ./.Xdefaults
Ghostscript może używać jeszcze wielu innych zasobów zdefiniowanych w pliku .Xdefaults, ale definiowanie ich nie jest konieczne, ponieważ wartości domyślne sprawują się całkiem dobrze. Zebrano je w tabeli 24.1.
Tabela 24.1. Zasoby systemu X używane przez Ghostscript
Nazwa zasobu |
Klasa |
Domyślna wartość |
background |
Background |
white |
foreground |
Foreground |
black |
borderColor |
BorderColor |
black |
borderWidth |
BorderWidth |
1 |
geometry |
Geometry |
NULL |
xResolution |
Resolution |
calculated |
yResolution |
Resolution |
calculated |
useExternalFonts |
UseExternalFonts |
true |
useScalableFonts |
UseScalableFonts |
true |
logExternalFont |
LogExternalFont |
false |
externalFontTolerance |
ExternalFontTolerance |
10.0 |
palette |
Palette |
Color |
maxGrayRamp |
MaxGrayRamp |
128 |
maxRGBRamp |
maxRGBRamp |
5 |
useBackingPixmap |
UseBackingPixmap |
true |
useXPutImage |
UseXPutImage |
true |
useXSetTile |
UseXSetTile |
true |
regularFonts |
RegularFonts |
none |
symbolFonts |
SymbolFonts |
none |
dingbatFonts |
DingbatFonts |
none |
Przekierowanie wyjścia programu Ghostscript
Ghostscript jest bardzo elastyczny, jeśli chodzi o przekierowanie wyjścia do innych urządzeń. Używając argumentów wywołania, można skierować dane do urządzenia takiego jak drukarka za pomocą opcji -sDEVICE. Przykładowo, jeśli w Twoim systemie zainstalowane jest urządzenie o nazwie HPLaser, możesz skierować do niego dane wyjściowe poleceniem:
gs -sDEVICE=HPLaser plik.ps
W takim przypadku nie zobaczysz efektów działania interpretera w oknie graficznym. Możesz oczywiście wydrukować jednocześnie kilka plików, np.:
gs -sDEVICE=HPLaser plik.ps plik1.ps plik2.ps
Przekierowanie obowiązuje do momentu zakończenia działania programu gs. Jeśli urządzenie, do którego próbujesz skierować dane, nie istnieje, gs zakończy działanie z komunikatem unknown device. Listę dostępnych urządzeń możesz obejrzeć, wydając polecenie
gs -h
Jak widać na rysunku 24.4, Ghostscript potrafi obsłużyć dość dużo typów urządzeń.
Kolejność parametrów ma znaczenie dla programu gs; przykładowo, polecenie
gs plik.ps plik1.ps -sDEVICE=HPLaser plik2.ps
powoduje wydrukowanie tylko pliku plik2.ps, wyświetlając pliki o nazwach plik.ps oraz plik1.ps na ekranie.
Możesz również wysyłać różne pliki do różnych urządzeń, na przykład tak:
gs -sDEVICE=CanonBJet plik.ps plik1.ps -sDEVICE=HPLaser plik2.ps
Powyższe polecenie spowoduje wydrukowanie pliku plik.ps na drukarce o nazwie CanonBJet, natomiast plik plik2.ps zostanie wydrukowany na drukarce HPLaser. W większości przypadków łatwiej jest jednak wydać dwa osobne polecenia, co pozwala również uniknąć pomyłek.
Ghostscript umożliwia modyfikowanie efektów swojego działania. Jeśli posiadasz jedną ze starszych drukarek igłowych pozwalających określać rozdzielczość drukowanego dokumentu (na przykład dla wydruków próbnych i końcowych), możesz za pomocą odpowiednich opcji wybrać jedną z rozdzielczości. Aby wydrukować dokument na 24-igłowej drukarce Epson, używając najwyższej możliwej rozdzielczości, wydaj polecenie:
gs -sDEVICE=Epson -r360x180
Jeśli z jakiegoś powodu chcesz odłożyć drukowanie dokumentu na później, możesz efekty działania interpretera zapisać do pliku:
gs -sOutputFile out1.ps plik1.ps plik2.ps
Choć w systemie Linux można zamiast podanych wyżej opcji użyć przekierowania wejścia i wyjścia, zostały one wprowadzone z myślą o systemach, które nie mają takich możliwości.
Zmiana rozmiaru papieru
Domyślnie Ghostscript używa rozmiarów papieru podanych w pliku gs_statd.ps. W pliku tym zdefiniowanych jest kilkadziesiąt różnych formatów, zgodnych z normami europejskimi i amerykańskimi. Aby użyć rozmiaru innego niż domyślny, należy podać opcję -sPAPERSIZE, np. aby użyć formatu A4, wydaj polecenie:
gs -sPAPERSIZE=a4 -sDEVICE=HPLaser plik1.ps
Jeśli rozmiar papieru, którego chcesz użyć, nie jest zdefiniowany w pliku gs_stats.ps, musisz zmodyfikować któryś z istniejących w nim wpisów lub utworzyć nowy.
|
Czasem zmiana rozmiaru papieru przez podanie opcji -sPAPERSIZE nie daje rezultatu, ponieważ język PostScript (a więc i Ghostscript) umożliwia osadzenie polecenia określającego rozmiar papieru w dokumencie. Polecenie takie ma pierwszeństwo przed parametrem podanym w wierszu poleceń. Jedynym sposobem rozwiązania problemu jest wówczas modyfikacja pliku postscriptowego. |
Zmienne środowiskowe programu Ghostscript
Do modyfikowania zachowania programu Ghostscript można również wykorzystać zmienne środowiskowe. Zmienne używane przez ten interpreter wraz z opisem ich funkcji zebrano w tabeli 24.2.
Tabela 24.2. Zmienne używane przez Ghostscript
Zmienna |
Znaczenie |
GS_DEVICE |
Domyślne urządzenie wyjściowe |
GS_FONTPATH |
Lista katalogów, w których należy szukać czcionek |
GS_LIB |
Ścieżka przeszukiwania dla plików inicjalizacyjnych i czcionek; poszczególne katalogi oddzielane są dwukropkami |
GS_OPTIONS |
Lista argumentów, która będzie przetwarzana przed argumentami podanymi w wierszu poleceń przy wywołaniu programu |
TEMP |
Katalog, w którym przechowywane będą pliki tymczasowe |
Zmienna GS_OPTIONS może zostać użyta do modyfikacji działania interpretera Ghostscript. Można na przykład w jej definicji zawrzeć opcję GS_DEVICE z nazwą drukarki, dzięki czemu wyniki działania interpretera będą domyślnie kierowane na drukarkę. Zmienna GS_OPTIONS może zawierać zarówno argumenty, jak i opcje.
Zmienna TEMP wskazuje zwykle na katalog /tmp, ale można to oczywiście zmienić. Pliki tymczasowe tworzone przez Ghostscript mają nazwy rozpoczynające się od gs_. Niestety, pliki te nie zawsze są prawidłowo usuwane, więc powinieneś co jakiś czas usuwać je ręcznie, szczególnie jeśli intensywnie używasz programu gs.
Ghostview
Ghostview to program służący do wyświetlania plików postscriptowych na ekranie. Napisany został przez Tima Theisena i jest dostępny za darmo w Internecie i na płytach CD-ROM. Do opracowania danych używa interpretera Ghostscript, ale nie wymaga, by był on wcześniej zainstalowany w systemie.
Ghostview jest bardzo łatwy w obsłudze. Aby wyświetlić zawartość pliku rozdz1.ps, wydaj polecenie
ghostview rozdz1.ps
Większość użytkowników zmienia nazwę tego programu (albo tworzy odpowiedni alias) na gv, co jest o wiele wygodniejsze do wpisania niż jego pełna nazwa. Jeśli na przykład używasz powłoki tcsh, możesz wydać polecenie:
alias gv ghostview
które spowoduje utworzenie aliasu o nazwie gv, wskazującego na program ghostview.
Przykładowa zawartość okna głównego programu gv przedstawiona jest na rysunku 24.5.
Rysunek 24.5. Okno główne programu ghostview |
|
Obsługa programu ghostview
Jak widać na rysunku 24.5, sformatowana zawartość pliku postscriptowego wyświetlana jest w taki sam sposób, jak miało to miejsce przy zastosowaniu interpretera Ghostscript (ponieważ program Ghostview wywołuje program Ghostscript, aby opracować dane zawarte w pliku wejściowym). Pasek po prawej pozwala na przesuwanie oglądanego dokumentu, można również kliknąć na odpowiednim numerze, by przejść do wybranej strony.
W oknie programu znajduje się również kilka przycisków. Oto funkcje niektórych z nich.
Obsługa plików (File) - pozwala na odczytanie pliku, przeładowanie pliku z dysku, zakończenie działania programu i wyświetlenie informacji o prawach autorskich.
Opcje strony (Page) - w menu rozwijanym po naciśnięciu tego przycisku znajdują się polecenia służące do poruszania się w obrębie dokumentu, odświeżania zawartości ekranu, zaznaczenia lub usunięcia zaznaczenia bieżącej strony itp.
Skala (1.000) - po naciśnięciu tego przycisku można wybrać topień powiększenia wyświetlanego dokumentu.
Orientacja (Portrait) - pozwala zmienić orientację wyświetlanego dokumentu (Portrait - pionowa, Landscape - pozioma).
Rozmiar papieru (BBox) - pozwala zmienić wielkość strony.
ghostview jest programem łatwym i przyjemnym w obsłudze. W górnej części okna wyświetlana jest informacja o tytule dokumentu (jeśli został on zdefiniowany) lub o nazwie wyświetlanego pliku, informacja o wersji programu oraz data utworzenia dokumentu. Data określana jest na podstawie danych zapisanych w samym dokumencie lub na podstawie daty ostatniej modyfikacji wyświetlanego pliku.
|
Jedną z cech programu ghostview, która może Cię nieco zdziwić, jest sposób, w jaki strony są wyświetlane po pomniejszeniu lub powiększeniu okna. Po zminimalizowaniu, ghostview przechowuje wszystkie dane w pamięci, ale przy ponownym powiększeniu okna najpierw sprawdza, czy plik nie został zmieniony. Może to wprowadzić pewne opóźnienie, szczególnie w przypadku dużych plików. Jest to wbrew pozorom efekt zamierzony (za wyjątkiem opóźnienia), ponieważ pozwala na wyświetlanie zawsze aktualnej wersji pliku. |
Oprócz przycisków dostępnych w oknie programu ghostview, dostępnych jest również mnóstwo opcji podawanych w wierszu poleceń. Służą one głównie do zmiany konfiguracji zasobów systemu X Window lub modyfikacji zmiennych konfiguracyjnych i są omówione dokładniej w dokumentacji programu Ghostview.
Czcionki Ghostview
Wraz z programem Ghostview rozprowadzane są czcionki PostScript typu 1 i 3, które powinny wystarczyć do wyświetlenia i wydrukowania każdego dokumentu, z którym się zetkniesz. Można również dodać inne czcionki, wzbogacając w ten sposób możliwości programu. Powinny one zostać umieszczone w katalogu, w którym znajdują się pozostałe czcionki, czyli np.
/usr/share/ghostscript/3.33/fonts.
Aby czcionki były prawidłowo rozpoznawane, należy również zmodyfikować zawartość pliku Fontmap. Format wpisów w tym pliku jest prosty, wymaga tylko podania nazwy czcionki i pliku, w którym można znaleźć jej definicję, np.:
smiesznaczcionka (fun_fnt.pfb);
Zasoby X używane przez Ghostview
Zasoby używane przez Ghostview różnią się od tych używanych przez Ghostscript. Zebrano je w tabeli 24.3.
Tabela 24.3. Zasoby systemu X używane przez ghostview
Nazwa zasobu i opis |
Klasa |
Domyślna wartość |
showTitle - wyświetlanie tytułu |
Labels |
true |
showDate - wyświetlanie daty |
Labels |
true |
showLocator - wyświetlanie informacji o lokalizacji |
Labels |
true |
autoCenter - centrowanie strony w oknie |
AutoCenter |
true |
horizontalMargin - ile punktów przeznaczyć |
Margin |
20 |
verticalMargin - ile punktów przeznaczyć |
Margin |
44 |
minimumMagstep - najmniejsze dostępne powiększenie |
Magstep |
-5 |
maximumMagstep - największe dostępne powiększenie |
Magstep |
5 |
magstep - powiększenie domyślne |
Magstep |
0 |
orientation - domyślna orientacja strony |
Orientation |
Portrait |
page - numer strony, którą należy domyślnie wyświetlić |
Page |
|
pageMedia - domyślny rodzaj papieru |
PageMedia |
Letter |
forceOrientation - wymuszenie orientacji dokumentu |
Force |
false |
forcePageMedia - wymuszenie rodzaju papieru |
Force |
false |
Tabela 24.3. cd. Zasoby systemu X używane przez ghostview
Nazwa zasobu i opis |
Klasa |
Domyślna wartość |
swapLandscape - zamiana znaczenia parametrów Landscape i Seascape |
SwapLandscape |
false |
printCommand - polecenie używane do drukowania |
PrintCommand |
|
printerVariable - nazwa zmiennej zawierającej |
PrinterVariable |
PRINTER |
busyCursor - kursor pokazywany |
Cursor |
|
cursor - domyślna postać kursora |
Cursor |
cross hair |
safer - czy uruchamiać program |
Safer |
true |
Podsumowanie
W tym rozdziale zapoznaliśmy się z programami Ghostscript i Ghostview, narzędziami przeznaczonymi do obsługi plików postscriptowych. Możliwość obejrzenia zawartości pliku postscriptowego bez konieczności jego drukowania jest w praktyce bardzo przydatna, dlatego Ghostview jest jednym z częściej używanych programów w systemach UNIX-owych (czyli również w systemie Linux).
Proces konfigurowania drukarki w systemie linuxowym opisany jest w rozdziale 20. „Drukowanie”.
O programowaniu w systemie Linux mówi część piąta, począwszy od rozdziału 25. „gawk”.
Konfigurowanie różnych urządzeń, w tym drukarek, opisane jest w rozdziale 33. „Urządzenia”.
406 Część IV ♦ Graficzne interfejsy użytkownika
406 E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\24.DOC
E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\24.DOC 405
Rozdział 24. ♦ Ghostscript i Ghostview 405