내용을 기반으로 특정 PDF 페이지 삭제

내용을 기반으로 특정 PDF 페이지 삭제

고객 계정에 할당해야 하는 PDF 문서가 50,000개 이상 있습니다. 그러나 각 PDF에는 클라이언트에게 보여주고 싶지 않은 페이지(회사 내부 콘텐츠)가 포함되어 있으므로 해당 콘텐츠(페이지에 "Office Use Only"라고 표시됨)를 기반으로 특정 페이지를 삭제하고 PDF를 다음과 같이 저장할 수 있기를 원합니다. 새 파일.

스크립팅 측면에 만족합니다. 어떤 소프트웨어가 이와 같은 작업을 수행할 수 있는지 알고 싶습니다.

답변1

파이썬!

유지 관리되지 않는 라이브러리를 포함하여 PDF 파일을 조작하기 위한 많은 라이브러리가 있습니다.pypdf그리고 그 포크pyPDF2. 파일을 페이지별로 처리하고, 텍스트를 추출하고, 해당 페이지에 텍스트를 복사할 수 있습니다.

Python3.6 및 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)

문서의 텍스트가 원하는 대로 정확하게 표시되지 않을 수도 있습니다. PDF 문서에서는 줄, 단어, 심지어 문자까지 순서가 뒤바뀌어 나타날 수 있습니다. 텍스트 스트림 대신 특정 좌표에 나타나는 조각으로 문서를 구성할 수 있습니다.

텍스트가 순서대로 되어 있더라도(종종 그렇습니다), 여러 페이지에 걸쳐 있는 텍스트에는 그 사이에 바닥글과 머리글이 있습니다. 여러 줄에 걸쳐 있는 텍스트의 줄 바꿈 주위에는 추가 공백이 있을 수 있습니다. 같은 줄에 있는 텍스트라도 텍스트 정렬로 인해 단어 사이에 공백이 여러 개 있을 수 있습니다. 이것이 바로 \s+위의 정규 표현식에서 순수 공백 대신 사용한 이유입니다.

PDF에서 텍스트를 추출하는 도구는 페이지를 텍스트로 재구성하려고 시도하지만 항상 작업을 완벽하게 수행하는 것은 아닙니다. pyPdf가 문서를 제대로 처리하지 못하는 경우 텍스트 추출을 위해 다른 라이브러리를 사용해 볼 수 있습니다.이것그리고이것몇 가지 예를 들어보세요.

답변2

한 가지 옵션은 PDFEdit, Pdftk 또는 PDFSaM과 같은 명령줄 PDF 편집기를 살펴보는 것입니다. pdftotext는 삭제할 페이지 번호를 식별하는 간단한 방법으로 유용할 수 있습니다.

관련 정보