Exclua páginas específicas do PDF dependendo do conteúdo

Exclua páginas específicas do PDF dependendo do conteúdo

Tenho mais de 50.000 documentos PDF que precisam ser alocados às contas dos clientes. No entanto, cada PDF contém páginas que não quero que o cliente veja (coisas internas da empresa) e, portanto, gostaria de poder excluir páginas específicas com base em seu conteúdo ("somente para uso no escritório" que aparece na página) e salvar o PDF como um novo arquivo.

Estou confortável com o lado dos scripts, só preciso saber qual software é capaz de realizar tal tarefa.

Responder1

Pitão!

Existem várias bibliotecas para manipulação de arquivos PDF, incluindo as não mantidaspyPdfe seu garfoPyPDF2. Você pode processar um arquivo página por página, extrair o texto e copiar as páginas cujo texto seja adequado.

Executei o seguinte usando Python3.6 e PyPDF2==1.26.0:

#!/usr/bin/env python3
import re
import sys

from PyPDF2 import PdfFileWriter, PdfFileReader

pdf_in = PdfFileReader(sys.stdin.buffer)
pdf_out = PdfFileWriter()
for p in [pdf_in.getPage(i) for i in range(0, pdf_in.getNumPages())]:
    text = p.extractText()
    if not re.search(r'for\s+office\s+use\s+only', text, re.I):
        pdf_out.addPage(p)
pdf_out.write(sys.stdout.buffer)

Cuidado, pois o texto pode não aparecer no documento exatamente como você deseja. Num documento PDF, linhas, palavras ou até caracteres podem aparecer fora de ordem. Em vez de um fluxo de texto, o documento pode ser construído com peças que aparecem em determinadas coordenadas.

Mesmo que o texto esteja em ordem, o que geralmente acontece, o texto que abrange várias páginas terá um rodapé e um cabeçalho no meio. O texto que abrange várias linhas pode ter espaços extras ao redor das quebras de linha. Mesmo textos nas mesmas linhas podem ter vários espaços entre as palavras, devido à justificação do texto (é por isso que usei \s+em vez de um espaço simples na expressão regular acima).

Ferramentas que extraem texto de PDF tentam reconstruir a página como texto, mas nem sempre fazem um trabalho perfeito. Se o pyPdf não funcionar bem com seus documentos, você pode tentar outras bibliotecas para extração de texto; veresseeessetópico para alguns exemplos.

Responder2

Uma opção seria consultar editores de PDF de linha de comando como PDFEdit, Pdftk ou PDFSaM. pdftotext pode ser útil como uma maneira simples de identificar os números das páginas a serem removidas.

informação relacionada