Como criar e editar documentos PDF em Python

Em nosso tutorial anterior, aprendemos como ler documentos PDF em Python e discutimos os fundamentos da biblioteca PyPDF2. Embora alguns projetos exijam que você extraia dados de documentos PDF, também é muito comum que você precise criar um PDF próprio para coisas como geração automática de faturas ou confirmação de reservas.

Uma biblioteca incrível que você pode usar para criar e editar documentos em Python é a biblioteca PyPDF2. A biblioteca possui um enorme conjunto de recursos que permite fazer todo tipo de coisa, como extrair informações como texto, imagens e metadados do documento PDF que abordamos no tutorial anterior. Você também pode criar e editar um documento PDF, executar criptografia e descriptografia, adicionar ou remover anotações e muito mais.

Neste tutorial, nosso foco será a criação e edição de documentos PDF. Vamos começar.

Criando Documentos PDF

Nós usamos o PdfReader classe para ler e extrair conteúdo de um documento PDF e usamos o PdfWriter classe para criar novos arquivos PDF. Uma limitação do PyPDF2 é que você só pode usar a biblioteca para criar novos arquivos PDF a partir de arquivos PDF existentes.

Começaremos criando uma página em branco para nosso arquivo PDF e isso nos obriga a instanciar um objeto usando o PdfWriter() classe. Esta classe tem um método chamado add_blank_page() que criará uma página em branco com as dimensões especificadas e a anexará ao objeto existente.

As dimensões da página são especificadas em unidades de espaço do usuário padrão, onde 72 unidades são equivalentes a 1 polegada. Tendo isso em mente, podemos criar uma página de tamanho A4 multiplicando 8,27 por 72 para obter a largura da página e 11,69 por 72 para obter a altura da página.

Eu usei o seguinte código para criar um documento PDF em branco usando PyPDF2:

É importante usar valores inteiros para largura e altura da página. Caso contrário, você terá um documento PDF com dimensões incorretas. eu usei o open() função em Python e especificou um nome de arquivo junto com o modo de abertura. O valor que wb+ significa que estarei abrindo o arquivo binário para gravação e atualização.

Depois disso, eu uso o write() método para escrever o conteúdo de my_pdf_pages objetar ao doc.pdf Arquivo. Concedido, você só verá uma página em branco se abrir o arquivo agora, mas fomos capazes de criá-lo usando a biblioteca.

Lembre-se de como lemos diferentes páginas de um documento PDF no tutorial anterior usando o pages propriedade? o pages propriedade armazenou todas as páginas do documento como uma lista de Page objetos. Podemos extrair um conjunto específico de páginas e incorporá-las em nosso PDF recém-criado usando o add_page() método.

Aqui está um exemplo em que leio o conteúdo de dois livros PDF diferentes e gravo algumas de suas páginas em um novo arquivo sequencialmente:

Muito do código aqui é semelhante ao exemplo anterior. A única diferença é que, em vez do add_blank_page() método, estamos usando o add_page() método para adicionar um Page opor-se ao nosso documento. Nós iteramos sobre as páginas com índices de 1 a 9 e depois as adicionamos ao nosso PdfWriter objeto chamado my_pdf_pages um por vez. Uma vez que todas as páginas foram adicionadas, nós as escrevemos em nosso arquivo chamado trechos.pdf.

Alguns meses atrás, baixei um livro que queria ler. No entanto, só poderia ser baixado um capítulo por vez e eu queria mesclá-los todos em um único documento. Eu fiz isso com algum serviço terceirizado na época, mas podemos fazer isso com a mesma facilidade usando algumas linhas de código.

Em vez de ler um arquivo página por vez e depois anexar essa página ao nosso documento, também podemos anexar o arquivo inteiro de uma só vez usando o comando append_pages_from_reader() função. Essa função também aceita um segundo parâmetro que é o nome da função de retorno de chamada que você deseja chamar com cada acréscimo de página.

Divisão, inserção e concatenação de documentos PDF

Existe uma outra classe chamada PdfMerger na biblioteca PyPDF2 que você pode usar para criar um documento PDF em Python. Esta classe oferece funcionalidade mais avançada em comparação com o PdfWriter classe. Existem duas funções importantes que abordaremos aqui: append() e merge().

Vamos começar com append(). Na seção anterior, usamos o append_pages_from_reader() função do PdfWriter classe para anexar os capítulos em nosso livro, um após o outro. A vantagem de usar append() é que oferece mais opções e flexibilidade.

Como você pode ver, esse código é muito mais curto do que o que escrevi acima para realizar a mesma tarefa. A diferença importante é que não precisamos instanciar um PdfReader objeto para anexar os capítulos. o append() método do PdfMerger classe só precisa de um nome de arquivo ou um objeto de arquivo.

o append() O método aceita quatro parâmetros diferentes. O primeiro é o nome do arquivo como vimos acima.

O segundo parâmetro é uma string que identifica um marcador a ser aplicado no início do arquivo incluído. Poderíamos usá-lo para adicionar a contagem de capítulos como um marcador em nosso documento gerado.

O terceiro parâmetro permite adicionar apenas um conjunto específico de páginas ao livro, em vez do capítulo inteiro. pode ser um (start, stop[, step]) tupla para significar o start índice, o stop índice e o número de páginas a serem ignoradas.

Quando executei o código acima, ele criou um documento PDF com marcadores para cada capítulo. Ele também tinha apenas as primeiras 10 páginas de cada capítulo.

Digamos que você tenha vários livros, mas eles não têm um índice ou prefácio no início. O autor fornece o índice como um documento PDF separado. Como você o anexa ao início dos livros? o append() método não será de muita ajuda aqui, especialmente se você também quiser adicionar algum conteúdo em algum lugar no meio do livro. Felizmente, outro método semelhante chamado merge() seria útil aqui.

A primeira linha acima adiciona o documento de índice no início do nosso PdfMerger objeto enquanto a segunda linha grava todos os dados mesclados de volta em nosso arquivo PDF.

Adicionar marcadores a um documento PDF

É totalmente possível que você precise adicionar marcadores para algumas páginas específicas a um documento PDF para facilitar o acesso. Um método prático que você pode usar para adicionar marcadores é chamado add_outline_item(). Este método está disponível tanto no PdfWriter classe e o PdfMerger classe. Dois parâmetros obrigatórios para esse método especificam o título e o número da página do marcador. O título deve ser uma string e o número da página um número inteiro.

Você também pode especificar um item de estrutura de tópicos pai como o terceiro parâmetro para criar itens de marcador aninhados. Os próximos três parâmetros determinam a cor da fonte, o peso e o estilo do marcador. Aqui está um exemplo que usa os dois primeiros parâmetros para criar um marcador para o resumo do Capítulo 1.

Pensamentos finais

Neste tutorial, aprendemos como criar um documento PDF em Python e como adicionar conteúdo ao documento anexando páginas individuais ou um grupo de páginas. Também aprendemos como adicionar conteúdo em locais específicos em nosso documento PDF usando o PdfMerger classe da biblioteca PyPDF2.

Deixe uma resposta