GNU/Linux >> Tutoriales Linux >  >> Linux

Cortar páginas de un PDF en varias páginas

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

Linux
  1. Vim:¿Cómo abrir varios archivos en diferentes pestañas?

  2. ¿Cómo fusionar varias conexiones a Internet en una sola?

  3. ¿Cómo crear un archivo tar dividido en varios archivos o que los abarque?

  4. Dividir imagen en varias páginas

  5. Dividir una imagen dd en varios archivos

Cómo unir varias líneas en una en un archivo en Linux

Cómo combinar varios archivos PDF en un solo PDF en Linux

Cómo unir/combinar varios archivos de audio en uno solo en Linux

Cómo unir varias páginas PDF en una sola página

¿Cómo imprimo una página grande en varias páginas más pequeñas?

Combine múltiples comandos de Unix en una sola salida