O resumo mais completo! Fale sobre vários métodos de operação de PDF Python (mesclar, dividir, marca d'água, criptografia)

I. Introdução

Olá a todos, Eu já escrevi um caso sobre Python operacional PDF. A intenção original deste caso é fornecer a vocês um script conveniente. Ele não explica muito o princípio. Envolve um módulo muito prático para processamento de PDF PyPDF2. Este artigo irá analisá-lo. Este módulo envolverá principalmente

  • os Aplicação abrangente de módulos
  • glob Aplicação abrangente de módulos
  • PyPDF2 Operação do módulo

2. Operação básica

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
  • PdfFileWriterPode ser entendido como 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. imagemCada PDF de fatura consiste em duas páginas:imagem

Três, 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

Também há um ponto importante de conhecimento aqui: o leitor só pode entregar o conteúdo lido ao escritor 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, PdfFileWriter

path = r'C:\Users\xxxxxx'
pdf_writer = PdfFileWriter()

for i in range(16):
    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 gerado toda vez que um pdf for acessado e lido , de modo que o conteúdo de cada leitor entregue ao gravador será sobrescrito repetidamente e nossos requisitos de mesclagem não podem ser alcançados!

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

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

目的就是每次循环读取一个新的pdf文件交给读取器进行后续操作。实际上这种写法不是很提倡,由于各pdf命名恰好很规则,所以可以直接人为指定数字进行循环。更好的方法是用 glob 模块:

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

代码中 pdf_reader.getNumPages(): 能够获取读取器的页数,配合range就能遍历读取器的所有页。

pdf_writer.addPage(pdf_reader.getPage(page))能够将当前页交给写入器。

最后,用with新建一个pdf并由写入器的 pdf_writer.write(out)方法输出即可

四、拆分

如果明白了合并操作中读取器和写入器的配合,那么拆分就很好理解了,这里我们以拆分INV1.pdf为2个单独的pdf文档为例,同样也先来捋一捋逻辑:

  1. 读取器读取PDF文档
  2. 读取器一页一页交给写入器
  3. 写入器每获取一页就立即输出

通过这个代码逻辑我们也可以明白,写入器初始化和输出的位置一定都在读取PDF循环每一页的循环体内,而不是在循环体外

代码很简单:

from PyPDF2 import PdfFileReader, PdfFileWriter
path = 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))
    # 写入器被添加一页后立即输出产生pdf
    with open(path + '\INV1-{}.pdf'.format(page + 1), 'wb'as out:
        pdf_writer.write(out)

五、水印

本次的工作是将下图作为水印添加到INV1.pdfimagem首先是准备工作,将需要作为水印的图片插入word中调整合适位置后保存为PDF文件。然后就可以码代码了,需要额外用到copy模块,具体解释见下图:imagem就是把读取器和写入器初始化,并且把水印PDF页先读取好备用,核心代码稍微比较难理解:imagem加水印本质上就是把水印PDF页和需要加水印的每一页都合并一遍

由于需要加水印的PDF可能有很多页,而水印PDF只有一页,因此如果直接把水印PDF拿来合并,可以抽象理解成加完第一页,水印PDF页就没有了

Portanto, não pode ser mesclado diretamente . Em vez disso, as páginas PDF com marca d'água devem ser copygeradas continuamente em novas páginas new_pagepara uso posterior e, em seguida, use o .mergePagemétodo para concluir a mesclagem com cada página e, em seguida, entregue as páginas mescladas ao redator para saída unificada!

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

Seis, criptografia

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

Então, só precisa ligar após a operação relevante ser concluídapdf_writer.encrypt(密码)

Pegue a criptografia de um único PDF como exemplo:imagem

Escreva no final

É claro que, além da mesclagem, divisão, criptografia e marca d'água do PDF, podemos usar o nó Python do Excel e do Word para atender a mais necessidades de automação . Cabe ao leitor desenvolvê-las.

Por fim, espero que todos possam entender que um dos pontos principais da automação de escritório em Python é liberar as operações em lote e automatizar tarefas complexas!


Acho que você gosta

Origin blog.51cto.com/15064626/2598021
Recomendado
Clasificación