A biblioteca PyPdf facilita esse tipo de coisa se você estiver disposto a escrever um pouco de Python. Salve o código abaixo em um script chamado pdf-cat-even
(ou o que você quiser), torne-o executável ( chmod +x pdf-cat-even
) e execute-o como um filtro ( ./pdf-cat-even a.pdf b.pdf >concatenated.pdf
). Você precisa de pyPdf ≥1,13 para o addBlankPage
método.
#!/usr/bin/env python
import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
output = PdfFileWriter()
output_page_number = 0
alignment = 2 # to align on even pages
for filename in sys.argv[1:]:
# This code is executed for every file in turn
input = PdfFileReader(open(filename))
for p in [input.getPage(i) for i in range(0,input.getNumPages())]:
# This code is executed for every input page in turn
output.addPage(p)
output_page_number += 1
while output_page_number % alignment != 0:
output.addBlankPage()
output_page_number += 1
output.write(sys.stdout)
Gilles 'SO- parar de ser mau'
fonte
./pdf-cat-even $(cat list-of-file-names.txt) >concatenated.pdf
<list-of-file-names.txt tr '\n' '\0' | xargs -0 ./pdf-cat-even >concatenated.pdf
O primeiro passo é produzir um arquivo pdf com uma página vazia. Você pode fazer isso facilmente com muitos programas (LibreOffice / OpenOffice, inkscape, (La) TeX, scribus etc.)
Em seguida, inclua esta página vazia onde for necessário:
Se você quiser fazer isso automaticamente com um script, poderá usar, por exemplo,
pdftk file.pdf dump_data | grep NumberOfPages | egrep -o '[0-9]*'
para extrair a contagem de páginas.fonte
pdftk --version
retorna o pdftk 1.44. Lembro que meus amigos mais experientes passaram pelo menos 15 minutos tentando coisas diferentes para conseguir esse trabalho e desistiram.A resposta de Gilles funcionou para mim, mas como tenho que mesclar muitos arquivos, é mais conveniente poder ler os nomes deles em um arquivo de texto. Modifiquei levemente o código de Gilles para fazer exatamente isso, talvez ajude alguém:
fonte
Você também pode usar o LaTeX para fazer isso (embora eu saiba que provavelmente não é o que você deseja). Algo como o seguinte deve funcionar:
Observe que
\cleardoublepage
apenas insere uma página em branco com classes criadas para impressão em frente e verso (por exemplo, livro)Mais opções e informações
pdfpages
podem ser encontradas no CTAN .fonte
\includepdf[pages=-]{...}
.\cleardoublepage
somente insere uma página em branco se você estiver usando uma classe criada para impressão em frente e verso. Eu estava usando um artigo que não funciona; Corrigi e atualizei a pergunta para refletir isso.\includepdf
inclui apenas a primeira página por padrão (nem todas as páginas).\documentclass[twoside]{article}
funciona também.Aqui está o código com PyPDF2 e python3
fonte