Aquí hay un pequeño script de Python que usa la biblioteca PyPdf que hace el trabajo perfectamente. Guárdelo en un script llamado un2up
(o lo que quiera), hágalo ejecutable ( chmod +x un2up
) y ejecútelo como filtro ( 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)
Ignorar cualquier advertencia de desaprobación; solo los mantenedores de PyPdf deben preocuparse por eso.
Si la entrada está orientada de una manera inusual, es posible que deba usar diferentes coordenadas al truncar las páginas. Consulte ¿Por qué mi código no divide correctamente cada página en un PDF escaneado?
En caso de que sea útil, aquí está mi respuesta anterior que utiliza una combinación de dos herramientas más alguna intervención manual:
- Pdfjam (al menos la versión 2.0), basado en el paquete pdfpages LaTeX, para recortar las páginas;
- Pdftk , para volver a unir las mitades izquierda y derecha.
Ambas herramientas son necesarias porque, por lo que puedo decir, pdfpages no puede aplicar dos transformaciones diferentes a la misma página en una secuencia. En la llamada a pdftk
, reemplace 42 por el número de páginas en el documento de entrada ( 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
En caso de que no tenga pdfjam 2.0, es suficiente tener una instalación de PDFLaTeX con el paquete pdfpages (en Ubuntu: necesita texlive-latex-recomendado y quizás (en Ubuntu: texlive-fonts-recomendado ), y use el siguiente controlador archivo 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}
Luego ejecute los siguientes comandos, reemplazando 42 por el número de páginas en el archivo de entrada (que debe llamarse 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