Voici un petit script Python utilisant la bibliothèque PyPdf qui fait le travail proprement. Enregistrez-le dans un script appelé un2up
(ou ce que vous voulez), rendez-le exécutable ( chmod +x un2up
) et exécutez-le en tant que filter ( un2up <2up.pdf >1up.pdf
).
#!/usr/bin/env python
import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
input = PdfFileReader(sys.stdin)
output = PdfFileWriter()
for p in [input.getPage(i) for i in range(0,input.getNumPages())]:
q = copy.copy(p)
(w, h) = p.mediaBox.upperRight
p.mediaBox.upperRight = (w/2, h)
q.mediaBox.upperLeft = (w/2, h)
output.addPage(p)
output.addPage(q)
output.write(sys.stdout)
Ignorer les avertissements de dépréciation; Seuls les responsables de PyPdf doivent s’en préoccuper.
Si l'entrée est orientée de manière inhabituelle, vous devrez peut-être utiliser des coordonnées différentes pour tronquer les pages. Voir Pourquoi mon code ne scinde-t-il pas correctement chaque page d'un fichier PDF numérisé?
Au cas où cela serait utile, voici ma réponse précédente, qui associe deux outils et une intervention manuelle:
- Pdfjam (au moins la version 2.0), basé sur le package pdfpages LaTeX, pour rogner les pages;
- Pdftk , pour réunir les moitiés gauche et droite.
Les deux outils sont nécessaires car, autant que je sache, pdfpages n’est pas en mesure d’appliquer deux transformations différentes à la même page dans un flux. Dans l'appel à pdftk
, remplacez 42 par le nombre de pages du document d'entrée ( 2up.pdf
).
pdfjam -o odd.pdf --trim '0cm 0cm 14.85cm 0cm' --scale 1.141 2up.pdf
pdfjam -o even.pdf --trim '14.85cm 0cm 0cm 0cm' --scale 1.141 2up.pdf
pdftk O=odd.pdf E=even.pdf cat $(i=1; while [ $i -le 42 ]; do echo O$i E$i; i=$(($i+1)); done) output all.pdf
Si vous n'avez pas pdfjam 2.0, il suffit d'installer PDFLaTeX avec le paquet pdfpages (sous Ubuntu: vous avez besoin de texlive-latex-recommandé et peut-être (sous Ubuntu: texlive-fonts-recommandé ), et d'utiliser le pilote suivant. fichier driver.tex
:
\batchmode
\documentclass{minimal}
\usepackage{pdfpages}
\begin{document}
\includepdfmerge[trim=0cm 0cm 14.85cm 0cm,scale=1.141]{2up.pdf,-}
\includepdfmerge[trim=14.85cm 0cm 0cm 0cm,scale=1.141]{2up.pdf,-}
\end{document}
Puis exécutez les commandes suivantes, en remplaçant 42 par le nombre de pages du fichier d’entrée (qui doit être appelé 2up.pdf
):
pdflatex driver
pdftk driver.pdf cat $(i=1; pages=42; while [ $i -le $pages ]; do echo $i $(($pages+$i)); i=$(($i+1)); done) output 1up.pdf