O resumo mais completo! Fale sobre vários métodos de operação do Python PDF

Autor | Chen Xi

Fonte | Python inicial

Prefácio

Este artigo envolve principalmente:

  • Aplicação abrangente do módulo OS

  • Aplicação abrangente do módulo glob

  • Operação do módulo PyPDF2

Operação basica

O código para o módulo de importação PyPDF2 é frequentemente:

from PyPDF2 import PdfFileReader, PdfFileWriter

Dois métodos são importados aqui:

  • PdfFileReader pode ser entendido como um leitor

  • PdfFileWriter pode ser entendido como um escritor

A seguir, vamos entender melhor as maravilhas dessas duas ferramentas por meio de alguns casos.O arquivo de amostra utilizado é o pdf de 5 faturas.

O PDF de cada fatura consiste em duas páginas:

fundir

O primeiro trabalho é mesclar 5 PDFs de faturas em 10 páginas. Como o leitor e o escritor devem trabalhar juntos aqui?

A lógica é a seguinte:

  1. O leitor lê todos os PDFs uma vez

  2. O leitor passa o conteúdo lido para o escritor

  3. Saída unificada do escritor para um novo pdf

Há também um ponto importante de conhecimento aqui: o leitor só pode entregar o conteúdo lido ao redator página por página.

Portanto, a primeira e a segunda etapas na lógica não são realmente etapas independentes, mas depois que o leitor ler um pdf, ele fará um loop em todas as páginas do pdf e as entregará ao redator página por página. Finalmente, espere até que todo o trabalho de leitura termine antes de enviar.

Olhar para o código pode tornar a ideia mais clara:

from PyPDF2 import PdfFileReader, PdfFileWriterpath = r'C:\Users\xxxxxx'pdf_writer = PdfFileWriter()for i in range(1, 6):    pdf_reader = PdfFileReader(path + '/INV{}.pdf'.format(i))for page in range(pdf_reader.getNumPages()):        pdf_writer.addPage(pdf_reader.getPage(page))with open(path + r'\合并PDF\merge.pdf', 'wb') as out:    pdf_writer.write(out)

Como todo o conteúdo precisa ser entregue ao mesmo gravador para saída final, a inicialização do gravador deve ser fora do corpo do loop.

Se estiver no corpo do loop, ele se tornará um novo gravador a cada acesso de leitura de um pdf, de modo que o conteúdo de cada leitor entregue ao gravador será sobrescrito repetidamente e nossos requisitos de mesclagem não poderão ser atendidos!

O código no início do corpo do loop:

for i in range(1, 6):    pdf_reader = PdfFileReader(path + '/INV{}.pdf'.format(i))

O objetivo é ler um novo arquivo pdf em cada ciclo e entregá-lo ao leitor para operações subsequentes. Na verdade, esse método de escrita não é muito recomendado, porque cada nome de pdf é muito regular, então você pode especificar manualmente o número do ciclo. A melhor maneira é usar o módulo glob:

import globfor file in glob.glob(path + '/*.pdf'):    pdf_reader = PdfFileReader(path)

No código, pdf_reader.getNumPages (): pode obter o número de páginas do leitor, e pode percorrer todas as páginas do leitor com intervalo.

pdf_writer.addPage (pdf_reader.getPage (page)) pode fornecer a página atual ao redator.

Por fim, use com para criar um novo pdf e gerá-lo pelo método pdf_write.write (out) do escritor

Dividido

Se você entende a cooperação do leitor e do escritor na operação de mesclagem, a divisão é fácil de entender. Aqui, pegamos a divisão INV1.pdf em dois documentos PDF separados como exemplo e também começaremos com um traço. lógica:

  1. Leitor para ler documentos PDF

  2. Leitor entregue ao escritor página por página

  3. O Writer imprime imediatamente sempre que obtém uma página

Por meio dessa lógica de código, também podemos entender que as posições de inicialização e saída do gravador devem estar no corpo do loop que lê cada página do loop PDF, não fora do loop.

O código é simples:

from PyPDF2 import PdfFileReader, PdfFileWriterpath = r'C:\Users\xxx'pdf_reader = PdfFileReader(path + '\INV1.pdf')for page in range(pdf_reader.getNumPages()):# 遍历到每一页挨个生成写入器    pdf_writer = PdfFileWriter()    pdf_writer.addPage(pdf_reader.getPage(page))# 写入器被添加一页后立即输出产生pdfwith open(path + '\INV1-{}.pdf'.format(page + 1), 'wb') as out:        pdf_writer.write(out)

Marca d'água


Este trabalho é adicionar a seguinte imagem como marca d'água a INV1.pdf

O primeiro é o trabalho de preparação, insira a imagem que precisa ser uma marca d'água no Word, ajuste a posição adequada e salve como um arquivo PDF. Em seguida, o código pode ser codificado e o módulo de cópia precisa ser usado adicionalmente. A explicação específica é mostrada na figura abaixo:

É para inicializar o leitor e o gravador, e ler a página PDF da marca d'água primeiro para backup. O código principal é um pouco mais difícil de entender:

A marca d'água é essencialmente mesclar a página do PDF com marca d'água com todas as páginas que precisam ser marcadas.

Visto que o PDF que precisa de marca d'água pode ter muitas páginas, e o PDF com marca d'água tem apenas uma página, se o PDF com marca d'água for mesclado diretamente, ele pode ser compreendido abstratamente quando a primeira página é adicionada e a página do PDF com marca d'água desaparece.

Portanto, não pode ser mesclado diretamente. Em vez disso, as páginas do PDF com marca d'água devem ser continuamente copiadas em uma nova página em espera new_page e, em seguida, o método .mergePage é usado para completar a mesclagem com cada página, e a página mesclada é entregue ao redator para a saída unificada final !

Sobre o uso de .mergePage: aparece na página seguinte .mergePage (aparece na página superior), o efeito final é como mostrado na figura:

criptografia

A criptografia é muito simples, basta lembrar: "A criptografia é para criptografia do gravador"

Portanto, só precisa chamar pdf_writer.encrypt (senha) depois que a operação relevante for concluída

Pegue a criptografia de um único PDF como exemplo:

Obviamente, além da fusão, divisão, criptografia e marca d'água do PDF, também podemos usar o Python para combinar o Excel e o Word para atender a mais requisitos de automação, que são deixados para os leitores se desenvolverem.



更多精彩推荐

Acho que você gosta

Origin blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/108722048
Recomendado
Clasificación