Aqui está um pequeno script Python usando a biblioteca PyPdf que faz o trabalho perfeitamente. Salve-o em um script chamado un2up
(ou o que você quiser), torne-o executável ( chmod +x un2up
) e execute-o como um 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)
Ignore quaisquer avisos de descontinuação; somente os mantenedores do PyPdf precisam se preocupar com eles.
Se a entrada estiver orientada de maneira incomum, talvez seja necessário usar coordenadas diferentes ao truncar as páginas. Veja Por que meu código não é dividido corretamente página em um pdf digitalizado?
Caso seja útil, aqui está minha resposta anterior, que usa uma combinação de duas ferramentas e alguma intervenção manual:
- Pdfjam (pelo menos, versão 2.0), com base no pdfpages pacote LaTeX, para cortar as páginas;
- Pdftk , para juntar as metades esquerda e direita.
As duas ferramentas são necessárias porque, até onde posso dizer, as páginas do pdf não podem aplicar duas transformações diferentes à mesma página em um fluxo. Na chamada para pdftk
, substitua 42 pelo número de páginas no 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
Caso você não tenha o pdfjam 2.0, basta ter uma instalação do PDFLaTeX com o pacote pdfpages (no Ubuntu: você precisa de texlive-latex-recommended e talvez (no Ubuntu: texlive-fonts-recommended ) e use o seguinte arquivo de driver 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}
Em seguida, execute os seguintes comandos, substituindo 42 pelo número de páginas no arquivo de entrada (que deve ser chamado de 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