Como posso dividir um arquivo PDF em páginas únicas rapidamente (ou seja, na linha de comando do Terminal)?

23

Eu tenho um arquivo PDF de 6 páginas que quero dividir em 1.pdf, 2.pdf, 3.pdf, etc ...

A visualização não funciona de maneira surpreendente (a menos que esteja faltando alguma coisa).

Gostaria muito de poder executar esta tarefa simples a partir da linha de comando, mas, neste momento, aceitarei qualquer coisa que faça o trabalho (sem fazer o download de software incompleto)

Para sua informação, http://users.skynet.be/tools/ não funciona como anunciado.

user391339
fonte
2
Uma boa solução de linha de comando é dessa resposta SE . Você pode instalar o ghostscript usando o Homebrew .
Fideli

Respostas:

21

Abra o pdf na visualização e, em seguida, no menu Exibir, selecione miniaturas. Ctrl selecione as páginas que deseja arrastar e solte-as na área de trabalho.

eleethesontai
fonte
11
Isso funcionou bem. Levei cerca de 30 segundos para fazer isso depois de mexer por cerca de 30 minutos. Algumas pessoas estão usando esta técnica em conjunto com o Automator, mas ainda não a tentei.
user391339
35

Isso pode ser alcançado usando pdfseparate. Você pode instalar o poppler com homebrew, por brew install poppler. Isso também será instalado pdfseparate. Para dividir o PDF document.pdfem em páginas únicas 1.pdf, 2.pdfetc. uso:

pdfseparate document.pdf %d.pdf
ttq
fonte
11
Apenas instalado popplerhá um dia atrás por poder converter documentos PDF em SVG com pdf2svg. Não percebeu que popplervem com o pdfseparatecomando. Como a resposta aceita acima (arrastar e soltar todas as páginas PDF com visualização na área de trabalho) exige que eu "clique" e como eu gosto de soluções no terminal que funcionam automaticamente por apenas uma única linha de comando, pdfseparateé exatamente o que eu preciso. Muito obrigado por essa dica!
Arvid
Curiosamente, o pdfseparate produz pdfs cujo tamanho total é muito maior do que o tamanho do pdf original. Eu tinha um documento de 400 páginas com 1,9 MB. Depois de dividir, recebi algo em torno de 60 MB.
Konstantin
5

Se você estiver interessado em fazer isso na linha de comando, consulte o script python splitPDF de Benjamin Han para fazer o trabalho. Por exemplo:

splitPDF.py in.pdf 3 5

dividiria o arquivo in.pdfem 3 arquivos, dividindo nas páginas 3 e 5.

Jean-Philippe Pellet
fonte
Isso é bom e um pouco mais flexível no que você pode produzir do que o pdfseparate acima. Embora seja principalmente para dividir um pdf em lotes de páginas, se você quiser dividir cada página, poderá usá-lo facilmente seqpara produzir um intervalo de números em seu comando. Obrigado!
Dgig 22/04
11
algo como python splitPDF.py MyPDF.pdf $(seq -s ' ' 1 10 411)trabalhou para mim
dgig
11
Palavras ótimas. Confirmo que isso funciona diretamente no MacOS 10.13.3
MichaelCodes
1

Para outra alternativa, veja esta resposta . Isso usa as ferramentas de linha de comando do ImageMagick .

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

No entanto, você precisa ter cuidado com a qualidade.

pheon
fonte
1

Se você deseja extrair um intervalo de páginas, pode usar o seguinte script que você chama assim (supondo que você o salve no arquivo pdfextract.py em algum lugar do PATH do sistema, por exemplo, / usr / local / bin, e atribua a execução permissão com chmod 744 pdfextract.py):

pdfextract.py - entrada de arquivo / caminho / para / grande / pdf - saída de arquivo / caminho / para / novo / 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
fonte