Już od dobrych paru lat by przenieść tekst na papier klikam Plik/Drukuj czy inne File/Print i się drukuje. Doceniam - jeszcze pamiętam czasy, gdy każde oczekiwanie na wydruk dostarczało zdrowych emocji (wyjedzie za margines?, wydrukuje się jako źródło postscriptowe?, sprowokuje zrzucenie core przez któryś z filtrów?), a dla uzyskania sensownego wyglądu najlepiej było samemu zestawić sekwens konwerterów generujących PCL czy podobne drukarkowe narzecze.
Dziś jest łatwo. Czasem jednak warto pokusić się o odrobinę dodatkowego wysiłku.
O co chodzi - w obrazkach
Rozmaite dokumentacje techniczne często drukuję sobie w formie dwie strony na jednej kartce. O połowę mniej zużytego papieru, o połowę lżej w ręku i plecaku, przy rozłożeniu na biurku widać naraz cztery strony:
Czasy, gdy do uzyskania tej formy były potrzebne zaklęcia oparte na
pstops
minęły, mamy odpowiednią opcję wśród ustawień wydruku:
Efekt zależy od orginalnego pliku. Czasem jest zupełnie zadowalający, czasem jednak wynikiem jest masa wolnego miejsca i malutka nieczytelna czcionka:
A ja wolę tak:
i resztę artykułu poświęcę opisaniu jak to zrobić.
Instrukcja
By uzyskać czytelniejszą wersję, posługuję się impose
- przyjemnym
skrypcikiem służącym właśnie do efektywnego układania dwóch stron
na jednej kartce. Instalacja w odmianie Debian/Ubuntu to:
$ sudo apt-get install impose+
Impose pracuje na plikach postscriptowych, jeśli drukowany
dokument jest czymś innym (od PDF po DOC), trzeba go odpowiednio
skonwertować. Najprostszą uniwersalną metodą jest wydruk na drukarce
Do pliku
połączony z ustawieniem PostScriptu jako formatu
wynikowego.
Użycie impose
w najprostszej wersji wygląda tak:
$ impose original.ps
Powstaje plik original.ps.imposed
- gotowy plik PostScript, w którym
mamy po dwie strony złożone na jednej. Można go otworzyć na przykład
robiąc:
$ evince original.ps.imposed
Czasami powyższa wersja ciągle pozostawia zbyt dużo wolnego miejsca (dzieje się tak zwłaszcza, gdy drukujemy dokument zawierający crop-marki, ramkę dookoła strony, zapełnioną całkowicie stronę tytułową lub po prostu błędne informacje o marginesach). Wtedy pomaga ręczne sterowanie. Przykład:
$ impose -v \
-bbox 110 160 480 670 \
-noglue -gutter 5 \
-stdout \
original.ps > 2up.ps
Opcja -gutter
zwęża odstęp między kolumnami (domyślnie mamy 40).
Opcja -noglue
wyłącza balansowanie wolnego miejsca między środkiem a
marginesami (niezbyt istotne). Opcja -stdout
wypisuje wynik na
standardowe wyjście zamiast tworzyć plik .imposed
.
Kluczem do jak najlepszej prezentacji całości jest zaś -bbox
, co
trzeba indywidualnie dobrać do drukowanego pliku. Są to współrzędne
określające zadrukowaną część w ramach źródłowego dokumentu
(najpierw współrzędne lewego dolnego rogu, potem prawego
górnego). impose
wycina z każdej strony taki prostokąt i tylko te
fragmenty skaluje i układa w tworzonym wydruku.
Efekt tym lepszy, im ciaśniej dookoła faktycznej treści dobierzemy te współrzędne. Ale jak je ustalić?
Polecenie:
$ bboxx original.ps
(skrypt bboxx
także należy do pakietu impose+
) wypisze coś
takiego:
Page: llx lly urx ury
1 53 124 542 719
2 53 124 542 719
3 53 124 542 719
...
290 53 124 542 719
291 53 124 542 719
292 53 124 542 719
Document: 53 124 542 719
Są to formalnie zadeklarowane w pliku źródłowym rozmiary
poszczególnych stron (tu akurat wszystkie takie same), a na
koniec wynikające z nich ograniczenie zadrukowanej części
strony w całym dokumencie. Dokładnie tych wartości
używa impose
uruchomione bez parametru -bbox
. Chcąc dodatkowo
ściąć niepotrzebne marginesy trzeba nieco zwiększyć pierwsze dwie i/lub
nieco zmniejszyć ostatnie dwie liczby.
Innym sposobem jest otwarcie orginalnego pliku w gv
:
$ gv original.ps
Program ten pokazuje współrzędne punktu nad którym znajduje się kursor myszy:
Tu chodzi o 110x675
widoczne w lewej górnej części okna, kursor
jest nad punktem o współrzędnej x=110, y=675 (w plikach
postscriptowych punkt 0,0 jest w lewym dolnym rogu strony).
Stając odrobinę w lewo i w dół od lewego dolnego rogu tekstu można uzyskać pierwsze dwie współrzędne. Stając odrobinę w prawo i w górę od prawego górnego rogu tekstu - pozostałe dwie. Warto to sprawdzić na kilku stronach (przynajmniej jednej parzystej i jednej nieparzystej).
Gdy wynik uzyskany z impose
jest satysfakcjonujący - można
drukować. Tym razem w ustawieniach wydruku trzeba wybrać jedną stronę
na jednej kartce. Do zszywania jak na
powyższym zdjęciu (przy wydruku dwustronnym) służy Long-Edge Binding.
Dygresja o papierze
Skoro już o drukowaniu mowa, dorzucę ciekawostkę. Program evince
(czyli domyślna przeglądarka plików PS i PDF dla Gnome) kilka miesięcy
temu zaskoczył mnie, uparcie próbując drukować wszystko
w amerykańskim formacie papieru (letter
).
W /etc/papersize
miałem A4. Drukarka była skonfigurowana jako
używająca A4. W dosłownie żadnej konfiguracji - ani systemowej, ani
osobistej - nie pojawiał się papier letter. Niemniej jednak, evince
upierało się drukować właśnie tak.
Jak się okazało, poszło o moje ustawienia językowe. Ustawiłem sobie locale (LANG
) na
en_US.utf-8
(czasem naprawdę wolę anglojęzyczne menu i helpy).
Biblioteka locale wywnioskowała z tego LC_PAPER=en_US.utf-8
, a
evince
zignorowało wszelkie ustawienia z wyjątkiem tego właśnie.
Skoro język amerykański, to papier letter, no nie?
Ot, mała ilustracja na temat konkurujących standardów.
Rozwiązaniem problemu okazało się:
export LC_PAPER=“en_GB.UTF_8”
podobno działa też LC_PAPER=a4
.