Mamy w pracy drukarkowy kombajn OKI MC-560. Drukuje czarnobiało i w
kolorze, jedno- i dwustronnie, skanuje, faksuje, krawaty
wiąże… Ma też swoje wady a najbardziej dotkliwą (oprócz
częstego zakleszczania się papieru) jest problem z drukowaniem
dłuższych dokumentów, zwłaszcza zawierających większe ilości
ilustracji. Drukarka po otrzymaniu takiego pliku potrafi
najzwyczajniej w świecie się zawiesić, potrafi też przerwać
wydruk w przypadkowym miejscu.
Podejrzewam błędy we wbudowanym oprogramowaniu ujawniające się przy niedoborze wolnej pamięci (zresztą, problemy trochę złagodniały po wizycie serwismena, który wgrał aktualizację software) jakakolwiek jednak jest przyczyna, czasem potrzebuję coś dłuższego wydrukować, nie wszystko da się wygodnie czytać na czytniku.
Jako że krótkie dokumenty drukują się dobrze, oczywistym pomysłem było drukowanie po kawałku, po 10-20 stron. Okazało się to jednak nie tylko uciążliwe ale i nieskuteczne – drukarka po otrzymaniu paru takich wydruków naraz potrafiła się sypać tak samo, jak przy otrzymaniu jednego większego. Trzeba drukować na zasadzie puść parę stron, poczekaj aż drukarka je przemieli, dopiero wtedy puszczaj następne. Brrr…
Ten proces na szczęście dało się łatwo zautomatyzować, kosztem parunastu minut pracy przygotowałem skrypt, który robi właśnie powyższe: drukuje 20 stron, czeka aż zadanie się zakończy, wtedy drukuje następne 20 itd itp. Skrypt można pobrać stąd i prosty sposób używa się go tak:
perl print_in_parts.pl --file=jakis_duzy.pdf
a w nieco bardziej skomplikowany (poniżej drukujemy od strony 41, w paczkach po 10 stron) tak:
perl print_in_parts.pl --file=jakis_duzy.pdf --since=41 --split=10
Skrypt do działania
wymaga zainstalowanego standardowego
linuksowego systemu wydruku (ja korzystam z CUPS) – a dokładniej, komend
lp
i lpstat
, perla i paru perlowych modułów: Moose
, MooseX::Getopt
, PDF::API2
. Pod Debianem i Ubuntu te ostatnie instalujemy przez:
sudo apt-get install libmoosex-getopt-perl libpdf-api2-perl
W aktualnej wersji wydruk odbywa się dwustronnie, na domyślnej drukarce
i na papierze A4, można to łatwo zmienić edytując parametry polecenia lp
.
Treść skryptu: