GNU/Linux >> Tutoriels Linux >  >> Linux

Couper les pages d'un PDF en plusieurs pages

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

Linux
  1. Comment diviser une grande archive 'tar' en plusieurs fichiers d'une certaine taille

  2. Comment diviser un seul fichier en plusieurs fichiers en fonction des lignes

  3. Comment fusionner plusieurs connexions Internet en une seule ?

  4. Comment diviser un fichier texte en plusieurs fichiers *.txt ?

  5. Comment compresser plusieurs fichiers dans un seul fichier gz?

Comment joindre plusieurs lignes en une seule dans un fichier sous Linux

Comment fusionner plusieurs fichiers PDF en un seul PDF sous Linux

Comment joindre/fusionner plusieurs fichiers audio en un seul sous Linux

Comment joindre plusieurs pages PDF à une seule page

Comment imprimer une grande page sur plusieurs pages plus petites ?

Diviser l'image en plusieurs pages