Portál AbcLinuxu, 1. května 2025 18:59
Oboustranný tisk, tisk více stran na jeden list, sestavování sešitu. Pokud vám něco chybělo v nedávném článku o oboustranném tisku, najdete to zde.
V nedávné době vyšel na ABCLinuxu článek s návodem k oboustrannému tisku v Linuxu. Článek nevyčerpal všechny možnosti, které mohou nastat, proto jsem se jej rozhodl doplnit.
Řešíme úlohu, jak v Linuxu co nejpohodlněji tisknout oboustranně na
tiskárně, která to sama o sobě neumí. Dále se podíváme na postup, jak
tisknout více zmenšených stránek na jeden list papíru a nakonec, jak si
vytisknout sešit. Předpokládáme, že materiál k tisku je
připraven v postscriptovém souboru. Tento předpoklad není nijak
omezující, protože
z většiny aplikací se dá vymámit PostScript. Použijeme balík
psutils
, který je snad ve všech distribucích.
psutils
Balík psutils
je soubor programů, které umí různé kejkle
s postscriptovými soubory. Mimo jiné spojení více souborů do jednoho
(psmerge
, funguje ve velmi speciálních případech, ještě se
mi to nepovedlo), výběr některých stránek (psselect
),
zmenšení a umístění více stránek na jeden list papíru
(psnup
) a přeuspořádání stránek pro tisk sešitu
(psbook
, viz dále).
Jednotlivé programy z balíku psutils
se dají pospojovat
rourami. Pokud nezadáte výstupní soubor, tak se výsledek vysype na
standardní výstup, pokud navíc nezadáte vstupní soubor, data se berou
ze standardního vstupu. Spojením několika programů do kolony se dají
dělat velké věci.
Tady se zaměříme na praktickou stránku věci. Oželíme výklad suché teorie a dáme řešení pro různé situace. Předpokládáme, že tiskárna splňuje následující podmínky:
Pokud Vaše tiskárna pracuje jinak, čtěte přesto dále.
Odpovězte si na následující 2 výroky, které se týkají konstrukce tiskárny.
Mohou nastat 4 případy odpovědí. Popíšeme postup, jak nakonec dostat oboustranně vytištěné stránky seřazené ve správném (tj. vzestupném) pořadí.
Obě předchozí varianty jsou jednoduché v tom smyslu, že nevyžadují
tisk stránek v obráceném pořadí. V těchto případech si vystačíme
například s programem gv
.
Neřešíme způsob, jak se listy otáčí. Závisí to totiž na požadovaném výsledku (jestli tiskneme na výšku nebo na šířku). Když se uživatel trochu zamyslí, tak na to přijde. Ještě na to přijde řeč.
Případy (ano, ano) a (ne, ne) a jsou si podobné. Nedají se však spojit, protože vytištěné stránky by vždy v jednom z obou případů byly špatně (sestupně) seřazené. Stejně to platí i pro případy (ano, ne) a (ne, ano).
Jeden ze způsobů oboustranného tisku je pomocí programu
psselect
z balíku psutils
. Program
psselect
má řadu
způsobů, jak říct, které stránky chceme vybrat. Samozřejmostí je výběr
sudých (parametr -e
) a lichých (-o
) stran. Dále se
dají strany specifikovat výčtem a rozsahem (-p
). Také
se dá obrátit pořadí stránek (-r
). Jednotlivé volby se
dají kombinovat.
Následující skript vytiskne (s malou pomocí uživatele) oboustranně postscriptový soubor. Předpokládáme, že skript slouží pro tisk na jedné tiskárně, takže příslušné parametry se nastaví přímo ve skriptu a jako parametr se bude předávat jen jméno souboru. Neuvažujeme případ tiskáren s více zásobníky a výstupními drahami, kde jsou odpovědi na výroky 1.) a 2.) různé pro různé zásobníky a výstupní dráhy. Takové tiskárny by mohly umět oboustranný tisk samy a pokud neumí, tak se dá skript upravit.
#!/bin/bash
|
Ve své práci jsem řešil problém, jak vytisknout spoustu grafů tak, aby jich bylo více na stránce. Prvním řešením je přesvědčit aplikaci, která grafy generuje, aby je tak zrovna vytiskla (uložila do PostScriptu), druhým řešením je vygenerovat grafy po jednom na stránce a dodatečně je zmenšit a seskupit na stránku.
K tomuto úkolu se hodí program psnup
. Umí seskupit více
logických stránek na jeden list papíru. Jako parametr si vezme počet
stránek na list papíru a sám rozhodne, jak je na stránku umístit tak,
aby co nejlépe využil plochu. Někdy použije papír naležato
(landscape). Pokud uzná, že plochu využít neumí, tak
to oznámí a neudělá nic. Nedá se mu nijak domluvit. V praxi to
znamená, že na jeden list nemůžeme umístit 7, 11, 13,
17... stránek. Ostatní počty zvládá.
Dále se dá nastavit velikost papíru (na vstupu i výstupu), okraje
papíru (-m
), okraje logických stránek (-b
),
způsob umisťování jednotlivých stránek (po sloupcích -c
nebo řádcích - standard), linky mezi stránkami (-d
) atd.,
viz man psnup
.
Příklad 1: chceme stránky ze souboru vstup.ps
umístit po
čtyřech a uložit do souboru vystup.ps
, uděláme to takto:
psnup -4 vstup.ps > vystup.ps
|
Někdy se hodí vytisknout text tak, že z něho vytvoříme sešit,
tj. vytiskneme oboustranně, přeložíme v půlce a sešijeme (vhodné pro
krátké články, manuály apod.). Seřadit
správně stránky dá docela hodně přemýšlení. Například, pokud máme 12
logických stránek, tak na první list vytiskneme z jedné strany stránky
12 a 1 a z druhé 2 a 11 , na druhý list 10+3 a 4+9 atd. Principiálně by
to šlo i programem psselect
, ale psbook
se
hodí lépe.
psbook
se používá ve spojení s programem
psnup
tak, že výstup psbook
se prožene přes
psnup -2
a výsledek oboustranně vytiskneme. Pokud si
prohlédnete vazbu nějaké staré knihy,
uvidíte, že je svázána z mnoha malých sešitků (v angličtině se používá
slovo signature). I na toto psbook
pamatuje parametrem
-s
, kde se mu musí předhodit číslo, které je násobkem 4 a
znamená počet stránek v jednom sešitku. Pokud neuvedeme nic, nacpe
celý soubor do jednoho sešitku. Pokud není počet stránek v souboru násobkem počtu stránek v sešitku, tak se doplní prázdnými stranami.
Příklad 2: Používám k úspornému tisku skript kniha.sh
, který
zmenší stránky formátu A4 a umístí je po dvou na list papíru.
Výstup skriptu vytisknu oboustranně a dostanu tím sešitek.
Použití je následující:
kniha.sh vstup.ps > vystup.ps
|
#!/bin/sh
file=$1
|
Příklad 3: Osobně tisknu pro oddíl zpěvník pomocí TeXu a
psutils
takto: Připravím si zpěvník ve formátu
A5 jako soubor vstup.dvi
. Následující skript připraví
soubor pro tisk. Použití je
zpevnika5 vstup
|
(bez .dvi
) a výsledek najdu v souboru vstup_vysledek.ps
(výstup se dá samozřejmě upravit).
#!/bin/bash
|
Parametr -p a4
znamená požadovaný formát výstupu, kdežto
-P a5
je formát vstupu. Našel jsem chybu programu
psnup
- v tomto případě je ve výsledném postscriptovém
souboru špatně uvedený formát, a to A5 místo A4. Musí se ručně
přepsat na A4 (osmý řádek souboru). Nemám nejnovější verzi
psnup
, takže nevím, jestli není chyba už opravená.
Otáčení papíru při oboustranném tisku se dá popsat jednoduše. Předpokládejme, že papír prolézá tiskárnou po délce.
Pokud tiskneme na výšku (jedna strana na list, listy svážeme na delší straně), otáčíme kolem delší strany papíru. Pokud bychom ale chtěli z nějakého důvodu papíry sešít na horní (kratší) straně a otáčet listy nahoru, tak bychom otáčeli kolem kratší strany papíru.
Pokud tiskneme sešitek (tj. na šířku), otáčíme kolem kratší strany papíru. Toto se týká obou výše uvedených příkladů.
Zvláštní situace nastává, pokud sice máme dvě stránky na listu papíru, ale hodláme je sešít do kroužkové vazby tak, že je sešijeme na delší straně papíru. Znamená to, že při prohlížení před námi papíry leží naležato a otáčíme je nahoru. Hodí se to, pokud si okopírujete nějakou knihu po dvojlistech. V takovém případě se papíry otáčí kolem delší strany papíru.
Než se pustíte do tisku, podívejte se, jestli náhodou tiskárna neotáčí papíry sama. Například, pokud se papír dává do tiskárny zepředu a zase předem vyleze, tak už je otočený kolem kratší strany. Pokud si nejste jisti, musíte na otestování obětovat jeden list papíru.
Předvedený postup má výhodu v tom, že k oboustrannému tisku
nepotřebuje spolupráci správce systému. Stačí, když funguje
(jednostranný) tisk. Příslušné skripty si uživatel uloží do svého
vlastního adresáře se skripty (typicky to je ~/bin
a někde v .bashrc
si přidá tento adresář do cesty).
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.