¿Cómo puedo convertir un PDF con 2 lados por página a 1 lado por página?
¿Cómo puedo convertir un PDF con 2 lados por página a 1 lado por página?
Respuestas:
OK, el problema ya se resolvió con la ayuda de Acrobat (versión completa, no Reader). ¿Pero qué hacer si no tiene acceso a Acrobat? ¿Podría hacerse esto también con Ghostscript y pdftk?
... y por diversión, no usemos un archivo de entrada con páginas "dobles", sino uno con "agudos". En realidad, recibí uno de esos PDF hoy por correo electrónico. Era un volante, doblado en el Esquema de Leporello . El tamaño de la hoja era A4 horizontal (842pt x 595pt), y estaba doblado y distribuido de esta manera:
Front side to be printed, page 1 of PDF
+--------+--------+--------+ ^
| | | | |
| 5 | 6 | 1 | |
| | | | 595 pt
| | | | |
| | | | |
| | | | |
+--------+--------+--------+ v
^ ^
fold fold
v v
+--------+--------+--------+ ^
| | | | |
| 2 | 3 | 4 | |
| | | | 595 pt
| | | | |
| | | | |
| | | | |
+--------+--------+--------+ v
Back side to be printed, page 2 of PDF
<---------- 842 pt -------->
Quiero crear 1 PDF con 6 páginas, cada una de las cuales tiene el tamaño inusual de 280.67pt x 595 pt.
Primero extraigamos las secciones izquierdas de cada una de las páginas de entrada:
gswin32c.exe ^
-o left-sections.pdf ^
-sDEVICE=pdfwrite ^
-g2807x5950 ^
-c "<</PageOffset [0 0]>> setpagedevice" ^
-f myflyer.pdf
¿Qué hicieron estos parámetros?
-o ...............:
Nombre de archivo de salida. Implícitamente también utiliza -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 720 ppp. Por lo tanto, multiplique por 10 para obtener una coincidencia para PageOffset.-c "..............:
le pide a Ghostscript que procese el fragmento de código PostScript dado justo antes del archivo de entrada principal (que debe seguir -f
).<</PageOffset ....:
establece el desplazamiento de la imagen de la página en el medio. (Por supuesto, para las páginas izquierdas, el desplazamiento [0 0]
no tiene ningún efecto real).-f ...............:
procesar este archivo de entrada.¿Qué resultado logró el último comando?
Éste:
Output file: left-sections.pdf, page 1
+--------+ ^
| | |
| 5 | |
| |595 pt
| | |
| | |
| | |
+--------+ v
Output file: left-sections.pdf, page 2
+--------+ ^
| | |
| 2 | |
| |595 pt
| | |
| | |
| | |
+--------+ v
< 280 pt >
Ahora hagamos lo análogo para las secciones centrales:
gswin32c.exe ^
-o center-sections.pdf ^
-sDEVICE=pdfwrite ^
-g2807x5950 ^
-c "<</PageOffset [280.67 0]>> setpagedevice" ^
-f myflyer.pdf
Resultado:
Output file: center-sections.pdf, page 1
+--------+ ^
| | |
| 6 | |
| |595 pt
| | |
| | |
| | |
+--------+ v
Output file: center-sections.pdf, page 2
+--------+ ^
| | |
| 3 | |
| |595 pt
| | |
| | |
| | |
+--------+ v
< 280 pt >
Por último, las secciones correctas:
gswin32c.exe ^
-o right-sections.pdf ^
-sDEVICE=pdfwrite ^
-g2807x5950 ^
-c "<</PageOffset [561.34 0]>> setpagedevice" ^
-f myflyer.pdf
Resultado:
Output file: right-sections.pdf, page 1
+--------+ ^
| | |
| 1 | |
| |595 pt
| | |
| | |
| | |
+--------+ v
Output file: right-sections.pdf, page 2
+--------+ ^
| | |
| 4 | |
| |595 pt
| | |
| | |
| | |
+--------+ v
< 280 pt >
Ahora combinamos las páginas en un archivo:
pdftk.exe ^
A=right-sections.pdf ^
B=center-sections.pdf ^
C=left-sections.pdf ^
cat A1 B2 C2 A2 B1 C1 ^
output single-files-input.pdf
verbose
Hecho. Aquí está el resultado deseado. 6 páginas diferentes, de tamaño 280.67x595.
Resultado:
+--------+ +--------+ +--------+ +--------+ +--------+ +--------+ ^
| | | | | | | | | | | | |
| 1 | | 2 | | 3 | | 4 | | 5 | | 6 | |
| | | | | | | | | | | | 595 pt
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
+--------+ +--------+ +--------+ +--------+ +--------+ +--------+ v
< 280 pt > < 280 pt > < 280 pt > < 280 pt > < 280 pt > < 280 pt >
f = open("order.dat","w")
for i in [a+1 for a in xrange(63)]: f.write("A{0} B{0} ".format(i))
f.close()
Esto creará un archivo order.dat con "A1 B1 A2 B2 ... A63 B63". Luego puede copiarlo y pegarlo en pdftk
.
@peims, gracias. Aquí está la versión paso a paso de su método. Lo probé en un archivo que quería convertir para mi Kindle DX, y funciona perfectamente:
Luego, use pdftk.exe (de http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/ ) para intercalar los resultados en un solo archivo. Copie "pdftk.exe", "left.pdf" y "right.pdf" en "D: \" y ejecute:
Nota: si copia los archivos a "C: \", no funcionará en Win 7 debido a los permisos de seguridad. Si no tiene un D: \, cree un directorio "C: \ x" para completar la operación.
Estos resultados normalmente serían lo suficientemente buenos. Sin embargo, hay dos pasos opcionales más para mejorar la salida.
Solo tuve el mismo problema. Me topé con briss, una herramienta GUI de Java de código abierto para separar y recortar páginas pdf:
http://sourceforge.net/projects/briss/
Funcionó muy bien para mí, en Linux, a pesar de que la interfaz de usuario no es completamente trivial. ¡Incluso funcionó con un pdf con algunas páginas de diferentes tamaños!
Puede duplicar el documento y luego recortar las páginas para que solo se muestren los números de página pares en un archivo y solo los números de página impares en el otro. Luego divida los archivos en páginas individuales y vuelva a combinarlos para hacer un documento con lados individuales en una página ...
Puede hacerlo utilizando varios métodos, por ejemplo:
Utilizo el siguiente script para procesar libros escaneados en Mac y Linux. Esto puede requerir bastante memoria.
#!/bin/bash
#
# This script processes scanned books. After scanning the books have been cropped with
# Preview. This does kind of a "soft crop" that we need to make a bit "harder".
#
# The second step is to take each page of the PDF and split this into two two pages,
# because each page of the scanned document actually contains two pages of the book.
#
#
FILE=`mktemp`.pdf
FILE2=`mktemp`.pdf
FILE3=`mktemp`.pdf
echo "Making a temporary copy of the input file."
cp $1 $FILE
#
# Start cropping
#
echo "Cropping the PDF"
# The first regex removes all boxes but CropBox. The second regex renames the CropBox as MediaBox
perl -pi.bak -e 's/\/(Media|Bleed|Art|Trim)Box[\n\l\f\s]*\[(.+?)\]//msg;' $FILE
perl -pi.bak -e 's/CropBox/MediaBox/g;' $FILE
echo "Validating the PDF"
#Run PDFTK to ensure that the file is OK
cat $FILE | pdftk - output $FILE2
#
# Done cropping, start splitting the pages
#
echo "Splitting the pages in two and changing to 200 dpi with imagemagick. Output goes to $FILE3"
convert -density 200 $FILE2 -crop 50%x0 +repage $FILE3
#
# Done spliting, copy the result in a new file
#
mv $FILE3 $1.pages.pdf
Gracias por una gran referencia. Tuve un problema similar pero quería compartir lo que funcionó para mí.
Tenía un pdf sensacionalista orientado al paisaje con texto orientado al retrato solo en el lado izquierdo. Esencialmente, el tabloide de 2 en adelante no tiene contenido en el lado derecho de la página. Punto de partida similar, pero el tabloide es 792 × 1224 (Vertical), 1124 x 792 (Paisaje) y la definición del punto para el 1/2 tabloide que necesitaba era 612 x 792 puntos.
"C:\Program Files\gs\gs9.10\bin\gswin64c.exe" -o left2.pdf -sDEVICE=pdfwrite -g6120x7920 -c "<</PageOffset [0 0]>> setpagedevice" -f "RFP.pdf"
Me consiguió el contenido que necesitaba en 8.5 x 11 vertical, mucho más legible.
Lo que entiendo es que un archivo PDF que muestra dos páginas (una al lado de la otra en una hoja) debe convertirse en una página por hoja, lo que da como resultado dos hojas de archivo PDF. En otras palabras, si hay un total de treinta páginas en 15 hojas, necesitamos convertir el archivo PDF en un archivo PDF de treinta hojas, cada una de las cuales muestra una página. Si este es el problema, he usado Adobe Acrobat XI PRO "herramienta de extracción de páginas" especificando números de página del 1 al 30
Krop (Python) y PDFscissors (Java) todavía no se han mencionado, échales un vistazo si tienes algunas notas de lectura en pdfnup-ped que deseas revertir a una presentación PDF adecuada.