Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Impression réduite

14 réponses
Avatar
Olivier V
Bonjour,

J'imprime souvent des documents *pdf* en les réduisant pour mettre 2 pages
(initialement en portrait) côte à côte en paysage.
J'imprime les recto puis les verso pour mettre ainsi 4 pages sur une
feuille.
Le tout dans l'ordre et agrafé.

Je cherche à réaliser un script qui me fasse l'impression, car actuellement
je passe par le gestionnaire d'impression graphique (kde) en utilisant le
filtre "plusieurs pages par feuille -> 2 pages" et en imprimant d'abord les
pages 1,2,5,6,9,10,13,14,... puis les pages 3,4,7,8,11,12,15,16,...

Peut-on créer un script qui me lance successivement ces deux impressions,
avec les pages mentionnées ci-dessus en "2 pages par feuille" ?

Je sais qu'il y a des outils du type pstops qui permettent d'extraire et de
remanier, mais la syntaxe m'est assez obscure pour extraire les pages
mentionnées ci-dessus ...

Je précise bien que ce n'est pas un livret que je veux obtenir.

Merci.

Olivier V

10 réponses

1 2
Avatar
Lucas Levrel
Le 12 mars 2009, Olivier V a écrit :

Peut-on créer un script qui me lance successivement ces deux impressions,
avec les pages mentionnées ci-dessus en "2 pages par feuille" ?



Bonjour,

Avec lpr on peut faire du "n-up printing" (n pages par page) et
sélectionner les pages paires et impaires, mais je ne pense pas qu'on
puisse combiner les deux pour avoir le résultat attendu (il risque bien
de combiner les pages paires, ou les pages impaires).

Donc je ferais (non testé) :
(script qui sort le doc en PS) | psnup -2 | lpr -o page-set=odd -P monimprimante
Et remplacer odd par even bien sûr...

Pour le script qui produit le PS, apparemment acroread sait le faire
(acroread -help) :
acroread -toPostScript fichier.pdf -
Sinon il y a aussi gs (demande au besoin).

--
LL
Avatar
Olivier V
Lucas Levrel a écrit :

Avec lpr on peut faire du "n-up printing" (n pages par page) et
sélectionner les pages paires et impaires, mais je ne pense pas qu'on
puisse combiner les deux pour avoir le résultat attendu (il risque bien
de combiner les pages paires, ou les pages impaires).



En fait je ne veux pas sélectionner les paires impaires et impaires, mais
1,2 sur une page puis 5,6 sur une page ...
ensuite je tourne mon paquet de feuilles et j'imprime 3,4 (qui se mettra
donc derrière 1,2) puis 7,8 (qui ira donc derrière 5,6) ...

Olivier V
Avatar
Rémi Moyen
Olivier V a écrit :

J'imprime souvent des documents *pdf* en les réduisant pour mettre 2 pages
(initialement en portrait) côte à côte en paysage.
J'imprime les recto puis les verso pour mettre ainsi 4 pages sur une
feuille.
Le tout dans l'ordre et agrafé.

Je cherche à réaliser un script qui me fasse l'impression, car actuellement
je passe par le gestionnaire d'impression graphique (kde) en utilisant le
filtre "plusieurs pages par feuille -> 2 pages" et en imprimant d'abord les
pages 1,2,5,6,9,10,13,14,... puis les pages 3,4,7,8,11,12,15,16,...

Peut-on créer un script qui me lance successivement ces deux impressions,
avec les pages mentionnées ci-dessus en "2 pages par feuille" ?

Je sais qu'il y a des outils du type pstops qui permettent d'extraire et de
remanier, mais la syntaxe m'est assez obscure pour extraire les pages
mentionnées ci-dessus ...



À une époque j'arrivais à faire 2-3 trucs avec pstops, j'ai un peu
oublié. Mais heureusement, je crois que ce que tu veux faire est presque
dans le man (en tout cas chez moi, sous "To re-arrange pages for
printing 2-up booklets"). En adaptant un peu l'exemple, je pense que ça
donnerait pour toi :

"4:(21cm,0)+(21cm,14.85cm)"
et
"4:(21cm,0)+(21cm,14.85cm)"

Si je ne me plante pas, ça veut dire (pour la première commande) :
- prendre des paquets de 4 pages ;
- prendre la 1ère page :
- la tourner de 90 degrés vers la gauche (L) ;
- la réduire à 70 % (@.7) (21/29,7 = 0,707) ;
- la décaler de 21 cm (parce que la rotation se fait autour du coin
en bas à gauche donc sans translation la page se retrouve en dehors de
la zone imprimée) ;
- la fusionner (+) avec la deuxième page (1) du paquet, qui est aussi
tournée (L), réduite (@.7) et décalée, cette fois en plus vers le haut
de 14,5 cm pour ne pas recouvrir la première.

On ne fait rien avec les pages 2 et 3 (cad la troisième et quatrième),
donc elles ne sont pas imprimées.

La deuxième commande fait la même chose avec les autres pages. Il est
possible que tu aies besoin de les faire tourner vers la droite au lieu
de la gauche (selon que la reliure est le long d'un grand ou d'un petit
côté), ça devrait être alors :

"4:(0,14.85cm)+(0,29.7cm)"

Donc au final, un truc genre :

pdf2ps file.pdf | pstops "4:..." | lp

(ou faire pdf2ps une seule fois et stocker le .ps complet dans un
fichier temporaire)

On peut aussi tout mettre en 2 pages par page avec psnup (-l ou -r si la
rotation par défaut ne te plaît pas, je crois) puis simplement imprimer
une page sur 2 avec pstops ("2:0" et "2:1", je crois). C'est plus court
(mais pas forcément plus rapide, peut-être même plus lent...) !

pdf2ps file.pdf | psnup -2 | pstops "2:0" | lp

Sans garantie, je n'ai rien testé (et j'ai pu mal comprendre ce que tu
voulais).
--
Rémi Moyen
Avatar
Yves
Olivier V wrote:

En fait je ne veux pas sélectionner les paires impaires et impaires, mais
1,2 sur une page puis 5,6 sur une page ...
ensuite je tourne mon paquet de feuilles et j'imprime 3,4 (qui se mettra
donc derrière 1,2) puis 7,8 (qui ira donc derrière 5,6) ...



Une fois la première mise en page faite, c'est bien pair-impair.
--
Que choisir a testé les peep shows. 60 millions de cons sont mateurs.
-+- Les nuls -+-
Avatar
moi-meme
Le Thu, 12 Mar 2009 07:49:44 +0100, Olivier V a écrit:


Je sais qu'il y a des outils du type pstops qui permettent d'extraire et de
remanier, mais la syntaxe m'est assez obscure pour extraire les pages
mentionnées ci-dessus ...



pdfbook (pas testé)origine inconnue
Options:
-q suppress verbose output
-d debug mode: do not cleanup temporary files
-2 place 2 pages on 1 page of output
-s <signature> group pages together in groups of size <signature>
<signature> must be positive and divisible by 4
-r reduce the last book to minimum required number of pages
-p <paper> set the paper size to: a3, a4, a5, b3, b4, b5, letter, legal
or executive (default is determined from infile, a4 if unknown)
-o <string> pass <string> directly to LaTeX pdfpages `includepdf' command
see the pdfpages package documentation for possible options


un script horrible avec le paquet pdfjam
-->[ scripts] cat pdf_to_book_goret
#!/bin/bash
#tripote des pdf
#eclate les pages
pdftk final_utf8.pdf burst
#met les 16 dans l'ordre
pdfjoin --paper a4paper --fitpaper false --noautoscale xx --outfile
dans_lordre.pdf pg_0016.pdf pg_0001.pdf pg_0002.pdf pg_0015.pdf
pg_0014.pdf pg_0003.pdf pg_0004.pdf pg_0013.pdf pg_0012.pdf pg_0005.pdf
pg_0006.pdf pg_0011.pdf pg_0010.pdf pg_0007.pdf pg_0008.pdf pg_0009.pdf
#met par 2 pages
pdfnup --nup 2x1 --paper a4paper --outfile sortie.pdf dans_lordre.pdf #et
c'est prêt à être imprimé ...

psutils c'est mieux ...
Avatar
Olivier V
moi-meme a écrit :

Le Thu, 12 Mar 2009 07:49:44 +0100, Olivier V a écrit:


Je sais qu'il y a des outils du type pstops qui permettent d'extraire et
de remanier, mais la syntaxe m'est assez obscure pour extraire les pages
mentionnées ci-dessus ...




un script horrible avec le paquet pdfjam
-->[ scripts] cat pdf_to_book_goret
#!/bin/bash
#tripote des pdf
#eclate les pages
pdftk final_utf8.pdf burst
#met les 16 dans l'ordre
pdfjoin --paper a4paper --fitpaper false --noautoscale xx --outfile
dans_lordre.pdf pg_0016.pdf pg_0001.pdf pg_0002.pdf pg_0015.pdf
pg_0014.pdf pg_0003.pdf pg_0004.pdf pg_0013.pdf pg_0012.pdf pg_0005.pdf
pg_0006.pdf pg_0011.pdf pg_0010.pdf pg_0007.pdf pg_0008.pdf pg_0009.pdf
#met par 2 pages
pdfnup --nup 2x1 --paper a4paper --outfile sortie.pdf dans_lordre.pdf #et
c'est prêt à être imprimé ...



Il y a un hic ... aucun fichier n'est créé.
Et si ça ne fait pas 16 pages ?

[ tmp]$ tranpdf test.pdf
Error: Failed to open PDF file:
final_utf8.pdf
Done. Input errors, so no output created.
This is pdfjoin version 1.20
pdfjoin: pg_0016.pdf does not exist, no files were processed
This is pdfnup version 1.20
pdfnup: dans_lordre.pdf does not exist, no files were processed

psutils c'est mieux ...



Peut-être ...
Avatar
Olivier V
Olivier V a écrit :

Il y a un hic ... aucun fichier n'est créé.



Pour ça, il y avait un bug au début du script.
Il fallait naturellement mettre :
pdftk $1 burst

#!/bin/bash
#tripote des pdf
#eclate les pages
pdftk $1 burst
#met les 16 dans l'ordre
pdfjoin --paper a4paper --fitpaper false --noautoscale xx --outfile
dans_lordre.pdf pg_0016.pdf pg_0001.pdf pg_0002.pdf pg_0015.pdf pg_0014.pdf
pg_0003.pdf pg_0004.pdf pg_0013.pdf pg_0012.pdf pg_0005.pdf pg_0006.pdf
pg_0011.pdf pg_0010.pdf pg_0007.pdf pg_0008.pdf pg_0009.pdf
#met par 2 pages
pdfnup --nup 2x1 --paper a4paper --outfile sortie.pdf dans_lordre.pdf
#et c'est prêt à être imprimé ...

Et si ça ne fait pas 16 pages ?



Alors ça ne fonctionne pas (le fichier n'est pas créé) :

[ tmp]$ tranpdf test.pdf
This is pdfjoin version 1.20
pdfjoin: pg_0016.pdf does not exist, no files were processed

Comment faire pour que ça fonctionne quelque soit le nombre le pages ?

Olivier V
Avatar
Olivier V
Rémi Moyen a écrit :

Donc au final, un truc genre :

pdf2ps file.pdf | pstops "4:..." | lp



Apparemment j'ai un souci avec ps2ps :

[ test_red_pages]$ ps2ps "4:(21cm,0)+(21cm,14.85cm)"
test.ps
Error: /undefinedfilename in (4:(21cm,0)+(21cm,14.85cm))
Operand stack:

Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval--
2 %stopped_push --nostringval-- --nostringval-- --nostringval--
false 1 %stopped_push
Dictionary stack:
--dict:1146/1684(ro)(G)-- --dict:0/20(G)-- --dict:70/200(L)--
Current allocation mode is local
Last OS error: 2
GPL Ghostscript 8.61: Unrecoverable error, exit code 1


On peut aussi tout mettre en 2 pages par page avec psnup (-l ou -r si la
rotation par défaut ne te plaît pas, je crois) puis simplement imprimer
une page sur 2 avec pstops ("2:0" et "2:1", je crois). C'est plus court
(mais pas forcément plus rapide, peut-être même plus lent...) !

pdf2ps file.pdf | psnup -2 | pstops "2:0" | lp



Idem ici avec ps2ps.
psnup se passe correctement.

[ test_red_pages]$ ps2ps "2:0" test_reduit.ps
Error: /undefinedfilename in (2:0)
Operand stack:

Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval--
2 %stopped_push --nostringval-- --nostringval-- --nostringval--
false 1 %stopped_push
Dictionary stack:
--dict:1146/1684(ro)(G)-- --dict:0/20(G)-- --dict:70/200(L)--
Current allocation mode is local
Last OS error: 2
GPL Ghostscript 8.61: Unrecoverable error, exit code 1

Sans garantie, je n'ai rien testé (et j'ai pu mal comprendre ce que tu
voulais).



Je re-précise :
- imprimer d'une les pages 1,2 5,6 9,10 ... sur autant de feuille que de
blocs de 2 pages en paysage,
- imprimer les pages 3,4 7,8 11,12 ... sur sur autant de feuille que de
blocs de 2 pages en paysage (il s'agira du verso de feuilles précédentes).

Olivier V
Avatar
Rémi Moyen
Olivier V a écrit :
Rémi Moyen a écrit :

Donc au final, un truc genre :

pdf2ps file.pdf | pstops "4:..." | lp



Apparemment j'ai un souci avec ps2ps :



C'est normal, tu utilises ps2ps et non pas pstops. Subtile différence,
il a fallu que je teste en vrai pour voir ça dans ton message...

ps2ps sert uniquement à convertir du ps d'un "standard" à un autre, en
gros. Enfin, je crois, je ne m'en suis jamais vraiment servi. pstops
sert à modifier un ps pour changer la mise en page et autres. Ce qui
t'intéresse ici.

Sans garantie, je n'ai rien testé (et j'ai pu mal comprendre ce que tu
voulais).



Je re-précise :
- imprimer d'une les pages 1,2 5,6 9,10 ... sur autant de feuille que de
blocs de 2 pages en paysage,
- imprimer les pages 3,4 7,8 11,12 ... sur sur autant de feuille que de
blocs de 2 pages en paysage (il s'agira du verso de feuilles précédentes).



C'est bien ce que j'avais compris. Reste à savoir si c'est bien ce que
fait le code que je t'ai donné :-)
--
Rémi Moyen
Avatar
Lucas Levrel
Le 22 mars 2009, Olivier V a écrit :
Je re-précise :
- imprimer d'une les pages 1,2 5,6 9,10 ... sur autant de feuille que de
blocs de 2 pages en paysage,
- imprimer les pages 3,4 7,8 11,12 ... sur sur autant de feuille que de
blocs de 2 pages en paysage (il s'agira du verso de feuilles précédentes).



As-tu testé ma proposition ?

--
LL
1 2