Extrair a primeira página de vários PDFs

17

Tem cerca de 500 PDFs para percorrer e extrair a primeira página de. Eles então precisam passar por um processo de conversão demorado, na esperança de tentar economizar algum tempo com um processo em lote para extrair apenas a primeira página dos 500 pdfs e colocá-la em um novo pdf. Eles deram uma olhada no Acrobat, mas não conseguem encontrar um método real de fazer isso para vários arquivos. Alguém conhece outros programas ou métodos que isso possa ser alcançado? Código aberto e gratuito são obviamente mais favoráveis ​​:)

EDIT: Na verdade, obtivemos algum sucesso usando o GhostScript para extrair apenas uma página. Agora estou olhando como agrupar isso e pegar a lista de arquivos e usá-los.

Tim Alexander
fonte
O que envolvem as outras etapas do processo de conversão?
Ignacio Vazquez-Abrams
Sobre sua edição, veja minha edição.
Frabjous

Respostas:

29

Usando pdftk ...

No mac e linux a partir da linha de comando.

for file in *.pdf ; do pdftk "$file" cat 1 output "${file%.pdf}-page1.pdf" ; done

No Windows, você pode criar um arquivo em lotes. Abra o bloco de notas e cole-o dentro:

for %%I in (*.pdf) do "pdftk.exe" "%%I" cat 1 output "%%~nI-page1.pdf"

Pode ser necessário substituir "pdftk.exe" pelo caminho completo para pdftk, por exemplo, "C:\Program Files\pdftk\pdftk.exeou seja o que for. (Eu não uso o Windows, então não sei.)

Salve-o com uma extensão que termina em .bat, solte-o na pasta com os PDFs e clique duas vezes.

Você pode fazer o mesmo com o Ghostscript, sim.

Vamos ver. Para Mac e Linux (todos em uma linha):

for file in *.pdf ; do gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="${file%.pdf}-page1.pdf" -dFirstPage=1 -dLastPage=1 "$file" ; done

Não sei exatamente qual seria o comando correspondente para um arquivo em lotes do Windows. Meu melhor palpite (- não tenho janelas, por isso não posso testar--):

for %%I in (*.pdf) do "C:\Program Files\gs\gs9.00\gswin32c.exe" -dSAFER -dNOPAUSE -dBATCH -sDEVICE#pdfwrite -sOutPutFile#"%%~nI-page1.pdf" -dFirstPage#1 -dLastPage#1 "%%I"

Verifique se o caminho do executável do script fantasma está correto e, bem, não testei isso desde que não uso o Windows.


EDIT: OK, acabei de perceber que você provavelmente não quer 500 PDFs de uma página, mas um único PDF que combina todos eles. Basta executar o procedimento acima e isso deixará 500 PDFs de uma página. Para combiná-los usando o pdftk ... no mac e linux:

pdftk *-page1.pdf cat output combined.pdf

Eu acho que é provavelmente o mesmo no Windows, exceto, talvez, precisando do caminho completo para o pdftk, como acima. Você pode adicionar essa linha após a linha acima no seu arquivo em lotes.

Com o Ghostscript ... no mac e linux:

gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="combined.pdf" *-page1.pdf

E provavelmente é o mesmo no Windows, exceto a substituição de "gs" no início pelo caminho completo para o gswin32c.exe, como acima.

Pode haver uma maneira de o ghostscript fazer as duas coisas em uma única etapa, mas estou com preguiça de descobrir agora.

Se a ordem na qual combiná-los for importante, precisaremos de mais informações.

frabjous
fonte
esse é o comando que eu estava procurando. passaram a tarde lendo sobre se loops no linux! Seu comando inicial é o correto, ou seja, preciso de 500 pdfs de uma página. Conseguira obter todas as primeiras páginas em um único pdf, mas a conversão para o excel o torna incontrolável. Meus usuários têm alguns requisitos muito específicos de solicitação e layout, o que é irritante, mas desafiador. obrigado pela ajuda !!
Tim Tim Alexander
2

Hoje tive que fazer hoje no Linux. Também deve funcionar para Mac. Execute o seguinte comando no seu terminal.

lpr -o page-ranges="1-1" path/to/folder/*.pdf

O lpr envia trabalhos para a impressora.

Observe o uso de caracteres * no comando. Isso executaria o comando para todos os seus arquivos PDF no diretório

vivek_ganesan
fonte
Como você aponta, isso enviará trabalhos para a impressora. Não é isso que o OP está pedindo.
Nick K9
1

Eu acho que você poderia usar uma impressora virtual em PDF, como o pdf-forge.

Você apenas "imprime" a primeira página, eu estou no Mac agora e não posso experimentá-lo, mas tenho certeza de que você pode fazê-lo mais do que um por vez.

Boa sorte!!

Trufa

Trufa
fonte
obrigado pelas dicas sobre eles. isso me levou ao GhostScript, que parece capaz de fazer o que eu quero. Obrigado
Tim Alexander
@ Tim Alexander, não há problema nenhum !!
Trufa
0

quanto ao comando do arquivo em lotes do Windows (.bat) (%% é para variáveis ​​em um arquivo bat)

extração da primeira página do pdf como jpg com tamanho / resolução reduzida

for %%I in (*.pdf) do "C:\Program Files (x86)\gs\gs9.14\bin\gswin32c.exe" -dSAFER -dNOPAUSE -dBATCH -sDEVICE#jpeg -r20 -sOutputFile#"%%~nI.jpg" -dFirstPage#1 -dLastPage#1 "%%I"

(no post acima, o sOutputFile foi escrito errado .. e com o caminho atual da instalação padrão do gs x86)

(veja também Como usar o Ghostscript para converter PDF de várias páginas em um único JPG? )

ebricca
fonte
0

No Linux

Eu escrevi esta linha de comando

tree -fai . | grep -P ".pdf$" | xargs -L1 -I {} pdftk {} cat 1 output {}.firstpage.pdf

Mas faz o trabalho, eu testei, também funciona com o maior número de pastas que você possui. Apenas certifique-se de executá-lo na raiz da estrutura de pastas. Cada pasta terá para cada arquivo pdf um pdf adicional que termina com.firstpage.pdf

Você precisa pdftke treepara isso e no Ubuntu Linux você pode instalá-lo com o apt:

sudo apt install pdftk tree
Eduard Florinescu
fonte
0

Ou use cpdf https://www.coherentpdf.com/ocaml-libraries.html :

cpdf -merge in1.pdf [<range>] in2.pdf [<range>] [<more names/ranges>]
     [-retain-numbering] [-remove-duplicate-fonts] -o out.pdf

cpdf -merge a.pdf 1 b.pdf 1 -o out.pdf
Jerry T
fonte