¿Cómo puedo dividir un archivo PDF en páginas individuales rápidamente (es decir, desde la línea de comando de Terminal)?

23

Tengo un archivo PDF de 6 páginas que quiero dividir en 1.pdf, 2.pdf, 3.pdf, etc.

La vista previa no funciona para esto sorprendentemente (a menos que me falte algo).

Me encantaría poder hacer esta simple tarea desde la línea de comandos, pero en este punto tomaré cualquier cosa que haga el trabajo (sin descargar software incompleto)

FYI http://users.skynet.be/tools/ no funciona como se anuncia.

usuario391339
fuente
2
Una buena solución de línea de comandos es de esta respuesta SE . Puede instalar ghostscript usando Homebrew .
fideli

Respuestas:

21

Abra el pdf en la vista previa y luego, en el menú de vista, seleccione miniaturas. Ctrl selecciona las páginas que deseas ahora arrastrarlas y soltarlas en el escritorio.

eleethesontai
fuente
1
Esto funcionó bien. Me llevó unos 30 segundos hacer esto después de agitarme durante unos 30 minutos. Algunas personas están usando esta técnica en conjunto con Automator, pero aún no la he probado.
user391339
35

Esto se puede lograr mediante el uso pdfseparate. Puede instalar poppler con homebrew, por brew install poppler. Esto también se instalará pdfseparate. Para dividir el PDF document.pdfen en páginas individuales 1.pdf, 2.pdf, etc. Uso:

pdfseparate document.pdf %d.pdf
ttq
fuente
1
Acabo de instalar hace popplerun día para poder convertir documentos PDF a SVG con pdf2svg. No noté que popplerviene con el pdfseparatecomando. Dado que la respuesta aceptada anteriormente (arrastrar y soltar todas las páginas PDF con vista previa al escritorio) requiere que haga "clic" y dado que me gustan las soluciones en el terminal que funcionan de forma automática con solo una línea de comando, pdfseparatees exactamente lo que necesito. Muchas gracias por esa pista!
Arvid
Curiosamente, pdfseparate produce archivos PDF cuyo tamaño total es mucho más grande que el tamaño del pdf original. Tenía un documento de 400 páginas con 1.9 MB. Después de dividir, obtuve algo alrededor de 60 MB.
Konstantin
5

Si está interesado en hacer esto desde la línea de comandos, puede mirar el script de python splitPDF de Benjamin Han para hacer el trabajo. Por ejemplo:

splitPDF.py in.pdf 3 5

dividiría el archivo in.pdfen 3 archivos, dividiéndolo en las páginas 3 y 5.

Jean-Philippe Pellet
fuente
Esto es bueno, y un poco más flexible en lo que puede generar que pdfseparate anterior. Aunque es principalmente para dividir un pdf en tiras de páginas, si quisiera dividir cada página, podría usarla fácilmente seqpara producir un rango de números en su comando. ¡Gracias!
dgig
1
algo así python splitPDF.py MyPDF.pdf $(seq -s ' ' 1 10 411)funcionó para mí
dgig
1
Palabras geniales Confirmo esto funciona directamente en MacOS 10.13.3
MichaelCodes
1

Para otra alternativa, vea esta respuesta . Esto utiliza las herramientas de línea de comandos de ImageMagick .

convert x.pdf -quality 100 -density 300x300 x-%04d.pdf

Sin embargo, debes tener cuidado con la calidad.

pheon
fuente
1

Si desea extraer un rango de páginas, puede usar el siguiente script que llama así (se supone que lo guarda en el archivo pdfextract.py en algún lugar de la RUTA de su sistema, por ejemplo / usr / local / bin, y le asigna la ejecución permiso con chmod 744 pdfextract.py):

pdfextract.py --file-in / path / to / large / pdf --file-out / path / to / new / pdf --start --stop

#!/usr/bin/env python
# -*- coding: utf-8 -*-


import argparse
import os
import subprocess as sp


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--file-in', required=True, type=str, dest='file_in')
    parser.add_argument('--file-out', required=True, type=str, dest='file_out')
    parser.add_argument('--start', required=True, type=int, dest='start', default=-1)
    parser.add_argument('--stop', required=True, type=int, dest='stop', default=-1)

    args = parser.parse_args()
    assert os.path.isfile(args.file_in)
    assert not os.path.isfile(args.file_out)

    # remove temporary files
    for el in os.listdir('/tmp'):
        if os.path.isfile(os.path.join('/tmp', el)) and el[:12] == 'pdfseparate-':
            os.remove(os.path.join('/tmp', el))

    sp.check_call('pdfseparate -f {:d} -l {:d} {:s} /tmp/pdfseparate-%d.pdf'.format(args.start, args.stop, args.file_in), shell=True)

    cmd_unite = 'pdfunite '
    for i in range(args.start, args.stop + 1):
        cmd_unite += '/tmp/pdfseparate-{:d}.pdf '.format(i)
    cmd_unite += args.file_out
    sp.check_call(cmd_unite, shell=True)

    # remove temporary files
    for el in os.listdir('/tmp'):
        if os.path.isfile(os.path.join('/tmp', el)) and el[:12] == 'pdfseparate-':
            os.remove(os.path.join('/tmp', el))


if __name__ == "__main__":
    main()
Konstantin
fuente