Vous pouvez résoudre ce problème avec l'aide de Ghostscript. pdftk
seul ne peut pas le faire (à ma connaissance). Je vais vous donner les étapes de la ligne de commande pour le faire manuellement. Il sera facile de le scripter comme une procédure, également avec différents paramètres pour les tailles de page et les numéros de page. Mais vous avez dit que vous pouviez le faire vous-même;-)
Comment résoudre ce problème avec l'aide de Ghostscript...
...et pour le plaisir, je l'ai récemment fait pas avec un fichier d'entrée comportant des pages "double-up", mais un avec des "treble-ups". Vous pouvez lire la réponse pour ce cas ici .
Votre cas est encore plus simple. Vous semblez avoir quelque chose de similaire à ceci :
+------------+------------+ ^
| | | |
| 1 | 2 | |
| | | 595 pt
| | | |
| | | |
| | | |
+------------+------------+ v
^
fold
v
+------------+------------+ ^
| | | |
| 3 | 4 | |
| | | 595 pt
| | | |
| | | |
| | | |
+------------+------------+ v
<---------- 842 pt -------->
Vous souhaitez créer 1 PDF avec 4 pages, chacune ayant la taille de 421 pt x 595 pt.
Première étape
Commençons par extraire les sections de gauche de chacune des pages d'entrée :
gs \
-o left-sections.pdf \
-sDEVICE=pdfwrite \
-g4210x5950 \
-c "<</PageOffset [0 0]>> setpagedevice" \
-f double-page-input.pdf
Qu'est-ce que ces paramètres ont fait ?
Tout d'abord, sachez qu'en PDF 1 pouce ==72 points . Ensuite, le reste est :
-o ...............:
Nomme le fichier de sortie. Utilise aussi implicitement-dBATCH -dNOPAUSE -dSAFER
.-sDEVICE=pdfwrite :
nous voulons PDF comme format de sortie.-g................:
définit la taille du support de sortie en pixels. La résolution par défaut de pdfwrite est de 720 dpi. Multipliez donc par 10 pour obtenir une correspondance pour PageOffset.-c "..............:
demande à Ghostscript de traiter l'extrait de code PostScript donné juste avant le fichier d'entrée principal (qui doit suivre avec-f
).<</PageOffset ....:
définit le décalage de l'image de la page sur le support. (Bien sûr, pour les pages de gauche le décalage de[0 0]
n'a aucun effet réel.)-f ...............:
traiter ce fichier d'entrée.
Quel résultat la dernière commande a-t-elle obtenu ?
Celui-ci :
Output file: left-sections.pdf, page 1
+------------+ ^
| | |
| 1 | |
| |595 pt
| | |
| | |
| | |
+------------+ v
Output file: left-sections.pdf, page 2
+------------+ ^
| | |
| 3 | |
| |595 pt
| | |
| | |
| | |
+------------+ v
<-- 421 pt -->
Deuxième étape
Ensuite, les bonnes sections :
gs \
-o right-sections.pdf \
-sDEVICE=pdfwrite \
-g4210x5950 \
-c "<</PageOffset [-421 0]>> setpagedevice" \
-f double-page-input.pdf
Notez le décalage négatif puisque nous décalons la page vers la gauche tout en gardant la zone de visualisation immobile.
Résultat :
Output file: right-sections.pdf, page 1
+------------+ ^
| | |
| 2 | |
| |595 pt
| | |
| | |
| | |
+------------+ v
Output file: right-sections.pdf, page 2
+------------+ ^
| | |
| 4 | |
| |595 pt
| | |
| | |
| | |
+------------+ v
<-- 421 pt -->
Dernière étape
Maintenant, nous combinons les pages en un seul fichier. Nous pourrions également le faire avec ghostscript, mais nous utiliserons pdftk
à la place, parce que c'est plus rapide pour ce travail :
pdftk \
A=right-sections.pdf \
B=left-sections.pdf \
shuffle \
output single-pages-output.pdf
verbose
Fait. Voici le résultat souhaité. 4 pages différentes, taille 421x595 pt.
Résultat :
+------------+ +------------+ +------------+ +------------+ ^
| | | | | | | | |
| 1 | | 2 | | 3 | | 4 | |
| | | | | | | |5595 pt
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
+------------+ +------------+ +------------+ +------------+ v
<-- 421 pt --> <-- 421 pt --> <-- 421 pt --> <-- 421 pt -->
Il existe un outil pdfposter qui peut être utilisé pour créer des PDF avec plusieurs pages pour une page d'entrée (mosaïque ou hachage des pages). Il est similaire à l'outil poster
, qui fait la même chose pour les fichiers PostScript.
Donc, après beaucoup plus de recherches (il semble que "pages coupées PDF" soit une bien meilleure recherche), j'ai trouvé un petit script appelé unpnup
qui utilise poster
, conversion PDF/PS et pdftk
pour faire exactement ce dont j'ai besoin. C'est un peu long, mais c'est de loin supérieur aux autres méthodes que j'ai trouvées (comme l'utilisation d'imagemagick) car il ne pixellise pas les pages avant de les recracher.
Juste au cas où mobileread disparaîtrait pour une raison quelconque, le cœur du script (sous licence GPLv2 ou ultérieure par Harald Hackenberg <hackenberggmx.at>
) est la suivante :
pdftk "$1" burst
for file in pg*.pdf;
do
pdftops -eps $file
poster -v -pA4 -mA5 -c0% `basename $file .pdf`.eps > `basename $file .pdf`.tps
epstopdf `basename $file .pdf`.tps
done
pdftk pg*.pdf cat output ../`basename $1 .pdf`_unpnuped.pdf