Mac OS X: Como mesclar arquivos PDF em um diretório de acordo com seus nomes de arquivo

30

Quero mesclar várias centenas de arquivos pdf em um diretório automaticamente, de acordo com os nomes dos arquivos.

Por exemplo

Os arquivos 1000.1.pdf 1000.2.pdf 1000.3.pdf 1000.x.pdf devem ser mesclados em 1000.pdf

e

2000.abc.pdf 2000.def.pdf 2000.ghi.pdf 2000.jkl.pdf 2000.5.pdf em 2000.pdf .

Não quero usar soluções baseadas no Preview / Automator (se disponível), porque, comparado a softwares de terceiros, como o Adobe Acrobat ou o PDFpen, a mesclagem de arquivos pdf com freqüência (dependendo dos documentos de origem) resulta em um aumento significativo no tamanho do arquivo (consulte, por exemplo, O que faz com que o tamanho do arquivo PDF aumente ao salvar na Visualização? )

você tem alguma recomendação? Obrigado!

lejonet
fonte
A combinação de PDFs sempre aumentará o tamanho do arquivo. Qual é exatamente o seu problema?
nohillside
1
@patrix Estou falando de centenas de arquivos a serem mesclados. Conforme vinculado acima, pode haver um aumento significativo no tamanho do arquivo com as diferentes ferramentas incluídas no Mac OS X. Por que devo querer um arquivo de texto mesclado com um aumento no tamanho de algumas centenas de por cento ?
Lejonet
2
@patrix, lejone8 ​​quer ter uma mesclagem automática de arquivos PDF, mas na proporção 1 + 1 = 2, não com 1 + 1 = 5? ou mais em tamanho de arquivo. Além disso, lejonet8 ressalta claramente que o uso de produtos da Apple não é aceitável devido ao seu baixo desempenho em comparação com produtos de terceiros! Não sei por que você exclui meus comentários, mas que seja.
Ruskes
1
Eu não entendo a solicitação de automação. É muito simples e rápido organizar (classificar) arquivos por nome, selecionar todos na categoria desejada e fazer a mesclagem uma vez clique em qualquer um dos programas disponíveis, como os respondidos aqui ou outros. O tamanho do arquivo resultante dependerá do tipo e do conteúdo dos arquivos PDF, portanto, 1 + 1 = 2 não é possível. O lejonet8 parece estar suspenso no argumento de por que os programas da Apple criam arquivos PDF maiores do que outros. Boa sorte em responder a isso.
Ruskes
2
Você pode editar a pergunta para descrever com mais detalhes o que "automatizado" significa para você (parece significar coisas diferentes para as pessoas que se dedicaram a propor soluções para o seu problema)? O que deve desencadear a mesclagem dos documentos? Quais padrões devem ser usados ​​para encontrar arquivos correspondentes? Especialmente, a resposta da DW parece ser altamente automatizada à primeira vista, mas talvez haja mais por trás de sua pergunta do que sabemos agora.
nohillside

Respostas:

25

Tente pdftk . É um software de linha de comando que pode juntar arquivos PDF (e fazer muitas outras coisas também, mas isso não é relevante aqui). Você pode baixá-lo na página oficial do pdftk .

Sintaxe de exemplo:

pdftk old1.pdf old2.pdf old3.pdf cat output new.pdf

irá criar o arquivo new.pdfque contém a concatenação dos arquivos old1.pdf, old2.pdf, old3.pdf.

Para resolver seu problema, com seus exemplos de nomes de arquivos:

pdftk 1000.*.pdf cat 1000.pdf
pdftk 2000.*.pdf cat 2000.pdf

e assim por diante. Você pode usar scripts de shell para tornar isso completamente automático, se desejado (mas você precisará gastar um pouco de tempo aprendendo a escrever scripts de shell).


Supondo que todos os arquivos sejam nomeados 1000.x, 2000.x etc., um script de shell pode se parecer com este

#!/bin/bash

for n in {1..9}; do
    if [[ -r ${n}000.1.pdf ]]; then
        rm -f ${n}000.pdf
        pdftk ${n}000.*.pdf cat ${n}000.pdf && mv ${n}000.*.pdf ~/.Trash/
    fi
done
DW
fonte
Obrigado pelo seu comentário, mas não vejo onde existe um fluxo de trabalho para minhas necessidades (centenas de arquivos com nomes semelhantes, mesclados de acordo com esses nomes).
precisa saber é o seguinte
1
@ lejonet8, é exatamente onde as ferramentas de linha de comando brilham! Editei minha resposta para dar um exemplo de como fazer isso. A elaboração de mais detalhes provavelmente está além do escopo desta questão e se relaciona mais a como escrever scripts de shell.
DW
Obrigado pela sua resposta. Infelizmente executando-o em meus arquivos que resultou nesta mensagem de erro: Erro: texto inesperado na página final da faixa, aqui: 1000.pdf
Lejonet
1
@ lejonet8 Talvez você possa elaborar um pouco mais os requisitos de automação na questão . Você está procurando coisas como "Ações de pasta" ou algo assim? O que desencadearia o processo de concatenação em primeiro lugar?
nohillside
3
@ lejonet8, você pode ter que experimentar um pouco para ver como fazer o pdftk funcionar para você. Infelizmente, uma mensagem de erro, sem contexto, não é suficiente para diagnosticar o problema. Tente concatenar alguns pares de arquivos. Experimentar. Veja se você pode diagnosticar quando o pdftk funciona / não funciona e a causa. Leia o tutorial. Poste uma pergunta sobre como fazer o pdftk funcionar em um site adequado do Stack Exchange ou em outro site de perguntas e respostas. FWIW, o pdftk tem sido muito confiável para mim, trabalhando com uma ampla variedade de arquivos pdf gerados por muitos programas diferentes. Claro que sua experiência pode variar.
DW
52

Há um script Python oculto no Automator.app que une arquivos .PDF

/System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py --help
Usage: join [--output <file>] [--shuffle] [--verbose]

Exemplo de uso:

/System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py --output all.pdf *.pdf
akuhn
fonte
2
Obrigado pela sua resposta. Não posso comentar sobre os antecedentes técnicos (pode haver uma diferença na mesclagem no Automator e no Preview). Dependendo dos arquivos de origem, também pode haver um aumento significativo no tamanho do arquivo. Acabei de testá-lo novamente e quatro arquivos com um tamanho de 12 mb no total foram unidos a um documento de 32 mb. Isso é inaceitável.
Lejonet
Desculpe, não posso ajudar com isso.
precisa saber é
4
Eu adicionei este comando como um alias no meu ~/.bash_profilearquivo como este: alias catpdf="/System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py --output all.pdf *.pdf"para que eu possa cdentrar em um diretório contendo PDFs e executar catpdf.
Stewart Macdonald
2
Voto positivo para uso engenhoso do script Python escondido em um APP! Decidi usar o pdftk embora para uma solução mais robusta.
Blairg23
1
@lejonet A base técnica é que ambos usam as mesmas estruturas (Quartz.CoreGraphics em 10.11), como você adivinhou. Isso pode ser visto nas primeiras linhas do script `join.py '(instruções de importação).
hans_meine
8

Você pode usar pdfunitedistribuído com poppler. Você pode instalar popplercom o Homebrew:

brew install poppler

E agora use-o:

pdfunite input1.pdf input2.pdf input3.pdf output.pdf

popplertambém vem com esses outros comandos: pdfdetach, pdffonts, pdfimages, pdfinfo, pdfseparate, pdftocairo, pdftohtml, pdftoppm, pdftops, pdftotext, além de pdfunite.

Flimm
fonte
0

O pdftk não funciona mais no El Capitan! (OS X 10.10)

Uma alternativa é Pagemaster de PDFTron. A sintaxe seria:

pagemaster -m *.pdf -o output.pdf

Ele não tem o problema de aumento do tamanho do arquivo da solução Automator acima, pois usa uma biblioteca de PDF personalizada.

Nota: esta não é uma ferramenta gratuita. A versão demo adiciona uma marca d'água fina em cada página.

antoine
fonte