Com relação à sua atualização: pdftk
preserva as configurações de qualidade de imagem, mas não metadados, marcadores de capítulo, etc.
sejda
é um novo kit de ferramentas de edição de pdf que pode fazer tudo o que o pdftk pode e muito mais. Mais importante ainda, ele preserva todas as configurações de qualidade e a maioria dos metadados do arquivo. O Sejda requer que o Java funcione.
Veja a documentação das ações de mesclagem:
$sejda merge -h
Given a collection of pdf documents, creates a single output pdf document composed by the selected pages of each input document taken in the given order.
Example usage: sejda-console merge -f /tmp/file1.pdf /tmp/file2.pdf -o /tmp/output.pdf -s all:12-14:32,12-14,4,34-:
Usage: sejda-console merge options
[--addBlanks] : add a blank page after each merged document if the number of pages is odd (optional)
--bookmarks -b value : bookmarks merge policy. {discard, retain, one_entry_each_doc }. Default is 'retain' (optional)
[--compressed] : compress output file (optional)
[--copyFields] : input pdf documents contain forms (high memory usage) (optional)
[--directory -d value] : directory containing pdf files to merge. Files will be merged in alphabetical order. (optional)
[--files -f value...] : pdf files to operate on: a list of existing pdf files (EX. -f /tmp/file1.pdf or -f /tmp/password_protected_file2.pdf:secret123) (optional)
[--filesListConfig -l value] : xml or csv file containing pdf files list to concat. If csv file in comma separated value format; if xml file <filelist><file value="filepath" /></filelist> (optional)
[--help -h] : prints usage information. Can be used to detail options for a command '-h command' (optional)
[--matchingRegEx -e value] : regular expression the file names have to match when the directory input is used (Ex -e "test(.*).pdf"). (optional)
--output -o value : output file (required)
[--overwrite] : overwrite existing output file (optional)
--pageSelection -s value : page selection script. You can set a subset of pages to merge as a colon separated list of page selections. Order of the pages is relevant. Accepted values: 'all' or 'num1-num2' or 'num-' or 'num1,num2-num3..'
(EX. -f /tmp/file1.pdf /tmp/file2.pdf -s all:all:), (EX. -f /tmp/file1.pdf /tmp/file2.pdf /tmp/file3.pdf -s all:12-14:32,12-14,4,34-:) to merge file1.pdf, pages 12,13,14 of file2.pdf and pages 32,12,13,14,4,34,35.. of file3.pdf.
If -s is not set default behaviour is to merge document completely (optional)
--pdfVersion -v value : pdf version of the output document/s {2, 3, 4, 5, 6 or 7}. Default is 6. (optional)
Digamos que você tenha dois arquivos PDF, file1.pdf e file2.pdf, cada um com 50 páginas, e gostaria de mesclá-los, deixando de fora a primeira e a última página em cada caso. Este comando deve fazer o truque:
sejda-console merge -f file1.pdf file2.pdf -o merge.pdf -s 2-49:2-49:
Observação: você pode ter que substituir sejda-console
por sejda-console.bat
se estiver no Windows.
Como você pode ver, ainda teria que fornecer manualmente o intervalo de páginas para cada documento. Se você quiser automatizar isso, você pode escrever um script bash ou algo semelhante para calcular primeiro a contagem de páginas em PDF (por exemplo, usando pdfinfo
da libpoppler) e então compor a linha de comando sejda
de acordo.