Puedes resolver esto con la ayuda de Ghostscript. pdftk
solo no puede hacer eso (que yo sepa). Te daré los pasos de la línea de comandos para hacer esto manualmente. Será fácil programar esto como un procedimiento, también con diferentes parámetros para tamaños de página y números de página. Pero dijiste que puedes hacerlo tú mismo;-)
Cómo solucionar esto con la ayuda de Ghostscript...
...y por diversión, lo he hecho recientemente no con un archivo de entrada con páginas "duplicadas", pero con "aplicaciones triples". Puede leer la respuesta para este caso aquí .
Su caso es aún más simple. Parece que tienes algo similar a esto:
+------------+------------+ ^
| | | |
| 1 | 2 | |
| | | 595 pt
| | | |
| | | |
| | | |
+------------+------------+ v
^
fold
v
+------------+------------+ ^
| | | |
| 3 | 4 | |
| | | 595 pt
| | | |
| | | |
| | | |
+------------+------------+ v
<---------- 842 pt -------->
Desea crear 1 PDF con 4 páginas, cada una de las cuales tiene un tamaño de 421 pt x 595 pt.
Primer paso
Primero extraigamos las secciones de la izquierda de cada una de las páginas de entrada:
gs \
-o left-sections.pdf \
-sDEVICE=pdfwrite \
-g4210x5950 \
-c "<</PageOffset [0 0]>> setpagedevice" \
-f double-page-input.pdf
¿Qué hicieron estos parámetros?
Primero, sepa que en PDF 1 pulgada ==72 puntos . Entonces el resto es:
-o ...............:
Archivo de salida de nombres. Implícitamente también usa-dBATCH -dNOPAUSE -dSAFER
.-sDEVICE=pdfwrite :
queremos PDF como formato de salida.-g................:
establece el tamaño del medio de salida en píxeles. La resolución predeterminada de pdfwrite es de 720 ppp. Por lo tanto, multiplique por 10 para obtener una coincidencia para PageOffset.-c "..............:
pide a Ghostscript que procese el fragmento de código PostScript dado justo antes del archivo de entrada principal (que debe seguir con-f
).<</PageOffset ....:
establece el desplazamiento de la imagen de la página en el medio. (Por supuesto, para las páginas de la izquierda, el cambio de[0 0]
no tiene ningún efecto real).-f ...............:
procesar este archivo de entrada.
¿Qué resultado logró el último comando?
Este:
Output file: left-sections.pdf, page 1
+------------+ ^
| | |
| 1 | |
| |595 pt
| | |
| | |
| | |
+------------+ v
Output file: left-sections.pdf, page 2
+------------+ ^
| | |
| 3 | |
| |595 pt
| | |
| | |
| | |
+------------+ v
<-- 421 pt -->
Segundo Paso
A continuación, las secciones correctas:
gs \
-o right-sections.pdf \
-sDEVICE=pdfwrite \
-g4210x5950 \
-c "<</PageOffset [-421 0]>> setpagedevice" \
-f double-page-input.pdf
Tenga en cuenta el desplazamiento negativo ya que estamos desplazando la página hacia la izquierda mientras mantenemos el área de visualización estacionaria.
Resultado:
Output file: right-sections.pdf, page 1
+------------+ ^
| | |
| 2 | |
| |595 pt
| | |
| | |
| | |
+------------+ v
Output file: right-sections.pdf, page 2
+------------+ ^
| | |
| 4 | |
| |595 pt
| | |
| | |
| | |
+------------+ v
<-- 421 pt -->
Último paso
Ahora combinamos las páginas en un solo archivo. También podríamos hacer eso con ghostscript, pero usaremos pdftk
en cambio, porque es más rápido para este trabajo:
pdftk \
A=right-sections.pdf \
B=left-sections.pdf \
shuffle \
output single-pages-output.pdf
verbose
Hecho. Aquí está el resultado deseado. 4 páginas diferentes, tamaño 421x595 pt.
Resultado:
+------------+ +------------+ +------------+ +------------+ ^
| | | | | | | | |
| 1 | | 2 | | 3 | | 4 | |
| | | | | | | |5595 pt
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
+------------+ +------------+ +------------+ +------------+ v
<-- 421 pt --> <-- 421 pt --> <-- 421 pt --> <-- 421 pt -->
Hay una herramienta pdfposter que se puede usar para crear archivos PDF con varias páginas para una página de entrada (mosaicos o cortes de páginas). Es similar a la herramienta poster
, que hace lo mismo con los archivos PostScript.
Entonces, después de buscar mucho más (parece que "páginas cortadas en PDF" es una búsqueda mucho mejor), encontré un pequeño script llamado unpnup
que usa poster
, conversión de PDF/PS y pdftk
para hacer exactamente lo que necesito. Es un poco largo, pero es muy superior a los otros métodos que encontré (como el uso de imagemagick) porque no rasteriza las páginas antes de escupirlas.
En caso de que mobileread desaparezca por algún motivo, el núcleo del script (con licencia GPLv2 o posterior de Harald Hackenberg <hackenberggmx.at>
) es el siguiente:
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