główna strona  Postscript
czyli drukuj
bez ograniczeń
 
Pojawienie się na rynku w 1985 r. pierwszej drukarki laserowej wyposażonej w Postscript można uznać za początek nowej ery w dziedzinie małej poligrafii. Idee Gutenberga trafiły pod strzechy!
dlaczego Postscript
Na Postscript zwróciłem uwagę w latach 90 ubiegłego wieku przy okazji pracy nad programem do generowania krzyżówek. W tym czasie Windows był wciąż jeszcze mało praktyczną ciekawostką, a wszystkie poważne programy działały w trybie tekstowym w środowisku DOS. Mój program, posługując się słownikiem haseł, w szybkim tempie układał krzyżówkę o zadanych rozmiarach i dostarczał wynik w postaci ciągu napisów. Było to niepraktyczne, gdyż aby zamieścić taką krzyżówkę w gazecie, trzeba było ją narysować ręcznie, co wymagało dodatkowego nakładu pracy. Zmodyfikowałem więc program tak, że wypluwał opis diagramu w postaci rozkazów Postscriptu. Taki plik, wciąż czysto tekstowy, przesłany do drukarki, powodował w magiczny sposób powstanie na papierze misternego rysunku.
Okazuje się to całkiem proste. Wystarczy sobie przypomnieć lekcje geometrii z podstawówki, zamknąć oczy i wyobrazić sobie tablicę z układem współrzędnych. Postscript to taka właśnie tablica, po której możemy się przemieszczać i w dowolnym miejscu rysować figury lub pisać litery. Niespodziewanie przydało mi się doświadczenie z Logo - wbudowane funkcje graficzne, beznawiasowy zapis wyrażeń i te klimaty. Choć oczywiście Postscript nie jest tak przyjazny, a Odwrotna Notacja Polska może być szokiem dla kogoś, kto się wcześniej o nią nie otarł.
Nigdy nie miałem ambicji zostania postscriptowym guru, ale obeznanie, wystarczające do zrozumienia cudzego programu i wprowadzenia w nim korzystnych zmian, bardzo się przydaje. W praktyce, zwykle nie pisze się kompletnych programów w Postscripcie, lecz raczej uzbraja programy w innych językach w funkcje generujące krótkie fragmenty powtarzalnych poleceń postscriptowych, z których automagicznie powstaje większa całość. W przywołanym dalej przykładzie kalendarza robi to skrypt w Perlu.
Postscript i PDF
Rzecz banalnie prosta: Generujemy kalendarz np. linuksowym programem cal, dodajemy kilka niezbędnych upiększeń - i mamy prosty programik postscriptowy:
%!PS
/red {1 0 0 setrgbcolor show 0 0 0 setrgbcolor} bind def
/m {moveto} bind def
/M {neg m} bind def
30 842 translate
/TeXGyreCursor-Bold findfont 9 scalefont setfont
10 17.6 M (    czerwiec 2011   ) show
10 30.2 M (po wt śr cz pi so ni) show
10 42.8 M (       1  2  3  4 ) show ( 5 ) red
10 55.4 M ( 6  7  8  9 10 11 ) show (12 ) red
10 68 M (13 14 15 16 17 18 ) show (19 ) red
10 80.6 M (20 21 22 ) show (23 ) red (24 25 ) show (26 ) red
10 93.2 M (27 28 29 30 ) show
showpage
Wystarczy plik z taką zawartością przesłać do serwisu konwertującego (zawierającego niewiele ponad zręczne wywołanie GhostScript-u) i mamy rezultat w postaci pliku PDF. Za małe literki? Można dodać w piątej linijce spację i 4 4 scale, aby cały wydruk powiększyć czterokrotnie. Jeszcze jedną spację i 15 rotate - i mamy wydruk obrócony. W podobny sposób powstaje wspomniany wyżej kalendarz.
Postscript wiecznie młody
Choć idea języka ma już swoje lata, standard wciąż twardo się trzyma za sprawą kolejnych wcieleń.
GhostScript, otwarty programowy interpreter Postscriptu, otworzył dostęp do tej technologii dla niezamożnych użytkowników. Wcześniej mieliśmy Postscript zaszyty sprzętowo w drukarkach z wyższej półki, przeważnie o rząd wielkości droższych od tych, które go nie miały. Nieliczne i trudno dostępne rozwiązania programowe miały ceny z kosmosu i stać na nie było tylko bogate firmy.
Potem PDF stał się niekwestionowanym standardem publikacji dokumentów. Jego bliskie pokrewieństwo z Postscriptem i łatwo dostępne metody konwersji postscriptowego programu do pliku PDF (w głównej mierze za sprawą GhostScript-u) wciąż podtrzymują zainteresowanie tym standardem.
A wreszcie całkiem nowa, ekscytująca biblioteka Cairo, na wskroś nowoczesna, a przy tym mocno oparta na postscriptowych podstawach. Znane programy, np. Gimp, używają Cairo do wyświetlania swych zaawansowanych interfejsów. Ale można także użyć jej do rzeczy banalnie prostych, jak graficzne wstawki na stronie internetowej.
Moduły udostępniające funkcje Cairo istnieją niemal dla każdego języka programowania, w tym także dla Perl-a. Posługiwanie się nimi jest bardzo proste:
#!/usr/bin/perl -w

use CGI qw(:standard);
use Cairo;

my $siz = 128;              # rozmiar rysunku w pikselach
my $sqr = $siz/1.41/2;      # rozmiar figury
my $deg = 3.14159/180;      # przelicznik kąta
my $rot = param('rot')||45; # skok obrotu

my $surf = Cairo::ImageSurface->create('argb32', $siz, $siz);
my $ctx = Cairo::Context->create($surf);

$ctx->translate($siz/2, $siz/2);
for (my $a = 0; $a < 360; $a += $rot) {
  $ctx->rotate($rot * $deg); rect(1, $a/360, 1);
}
$ctx->show_page;

print header(-type =>"image/png", -expires => '+1d',
  -Content_disposition => qq(inline; filename="image.png")
);
$surf->write_to_png_stream(sub { print $_[1]; });

sub rect {
  $ctx->rectangle(0, 0, $sqr, $sqr);
  $ctx->set_source_rgb(@_); $ctx->fill;
}
Po ustaleniu kilku parametrów liczbowych i utworzeniu płaszczyzny rysunku oraz kontekstu graficznego skrypt maluje szereg kwadratów w odcieniach purpury, obracając każdy o pewien kąt. Na koniec skrypt emituje obraz w formacie PNG, poprzedzając go stosownym nagłówkiem, więc można w kodzie strony odwoływać się do niego tak, jak do zwykłego obrazka:
<IMG SRC="http://www.jbw.pl/cgi-bin/cairo-test.cgi">
W rezultacie zobaczymy coś takiego:
Uważni czytelnicy zapewne zauważyli, że można w wywołaniu dodać parametr dla określenia innego kąta, np.:
Niewielka modyfikacja programu wystarczy, aby otrzymać plik postscriptowy lub dokument PDF.
 
opiekun: Janusz Wiśniewski :: rejestracja odwiedzin 1395 gości
mobi