É possível, usando Python, mesclar arquivos PDF separados?
Supondo que sim, preciso estender isso um pouco mais. Espero percorrer as pastas de um diretório e repetir este procedimento.
E posso estar abusando da sorte, mas é possível excluir uma página contida nos PDFs (minha geração de relatório sempre cria uma página em branco extra).
— Btibert3
Use Pypdf ou seu sucessor PyPDF2 :
Uma biblioteca Pure-Python construída como um kit de ferramentas PDF. É capaz de:
* dividir documentos página por página,
* mesclar documentos página por página,
Aqui está um programa de amostra que funciona com as duas versões.
# /programming/6773631/problem-with-closing-python-pypdf-writing-getting-a-valueerror-i-o-operation/6773733#6773733
— Gilles 'SO- pare de ser mal'
E agora, pypi.python.org/pypi/PyPDF2 que é o projeto sucessor do PyPDF
Funciona para mim apenas com a abertura no modo binário (fluxos de entrada e também fluxo de saída). open(input_file), 'r+b', e em vez de sys.stdout eu uso output_stream = open('result.pdf', 'w+b').
— Simeon Borko
@SimeonBorko Elimine o +, significa "ler e escrever" e nenhum dos arquivos é lido e escrito. Eu adicionei suporte de saída de suporte do Windows com base em stackoverflow.com/questions/2374427/… .
PyPDF2 / 3 não é estável, como posso mesclar arquivos pdf sem PyPDF2 / 3.
Tive que usar sys.stdout.bufferPython 3.6.8 (Linux)
— Greyshack
Você pode usar a classe do PyPdf2PdfMerger .
Concatenação de arquivo
Você pode simplesmente concatenar arquivos usando o appendmétodo.
Você pode passar identificadores de arquivo em vez de caminhos de arquivo, se desejar.
Se você quiser um controle mais refinado da mesclagem, existe um mergemétodo do PdfMerger, que permite especificar um ponto de inserção no arquivo de saída, o que significa que você pode inserir as páginas em qualquer lugar do arquivo. O appendmétodo pode ser considerado como mergeonde o ponto de inserção é o final do arquivo.
Aqui, inserimos todo o pdf na saída, mas na página 2.
Intervalos de páginas
Se você deseja controlar quais páginas são anexadas de um arquivo específico, você pode usar o pagesargumento de palavra - chave de appendemerge , passando uma tupla na forma (start, stop[, step])(como a rangefunção regular ).
Se você especificar um intervalo inválido, obterá um IndexError .
Nota: também para evitar que os arquivos PdfFileMergerfiquem abertos, o método s close deve ser chamado quando o arquivo mesclado for gravado. Isso garante que todos os arquivos sejam fechados (entrada e saída) em tempo hábil. É uma pena que PdfFileMergernão seja implementado como um gerenciador de contexto, então podemos usar a withpalavra - chave, evitar a chamada fechada explícita e obter alguma segurança de exceção fácil.
Você também pode querer dar uma olhada no pdfcatscript fornecido como parte do pypdf2. Você pode potencialmente evitar a necessidade de escrever código completamente.
O github PyPdf2 também inclui alguns exemplos de código que demonstram a fusão.
Mesclar todos os arquivos PDF que estão presentes em um diretório
Coloque os arquivos PDF em um diretório. Lance o programa. Você recebe um pdf com todos os pdfs mesclados.
A pdfrwbiblioteca pode fazer isso facilmente, supondo que você não precise preservar marcadores e anotações, e seus PDFs não estão criptografados. cat.pyé um exemplo de script de concatenação esubset.py um script de subconjunto de página de exemplo.
A parte relevante do script de concatenação - assume que inputsé uma lista de nomes de arquivos de entrada e outfné um nome de arquivo de saída:
Como você pode ver, seria muito fácil deixar de fora a última página, por exemplo, algo como:
Isenção de responsabilidade: eu sou o pdfrwautor principal .
Este é o mais estável.
Esta biblioteca merece mais reputação.
O exemplo a seguir mescla todos os arquivos em uma pasta em um único novo arquivo PDF:
— guruprasad mulay
aqui, http://pieceofpy.com/2009/03/05/concatenating-pdf-with-python/ , oferece uma solução.
Uma ligeira variação usando um dicionário para maior flexibilidade (por exemplo, classificação, desduplicação):
— Ogaga Uzoh
Eu usei o pdf unite no terminal linux aproveitando o subprocesso (assume que existam one.pdf e two.pdf no diretório) e o objetivo é mesclá-los em three.pdf