Python 은 PDF 에서 지정 한 내용 을 추출 하고 새 파일 을 생 성 합 니 다.

6892 단어 Python추출PDF
이전의 Python 사무 자동화 안 주제 에서 우 리 는 선택 한 추출 페이지 를 어떻게 합병 하 는 지 소개 했다.
그러나 추출 하고 자 하 는 페이지 번 호 를 예지 하지 않 고 지 정 된 내용 을 포함 하 는 페이지 추출 을 새로운 PDF 로 통합 하고 자 하 는 경우 가 많 습 니 다.본 고 는 두 가지 실제 수 요 를 예 로 들 어 설명 하고 자 합 니 다.
01 수요 설명
데 이 터 는 286 페이지 의 상장 회사 공개 연보 PDF 로 대체적으로 다음 과 같다.
Image
지금 은 Python 을 이용 하여 다음 과 같은 두 가지 요 구 를 완성 해 야 합 니 다.

필요 1:전략 이라는 두 글 자 를 포함 하 는 모든 페이지 를 추출 하고 새 PDF 통합
필요 2:그림 을 포함 하 는 모든 페이지 를 추출 하여 각각 PDF 파일 로 저장

02 선행 지식 과 논리 정리
2.1PyPDF2모듈 합병 실현PyPDF2모듈 을 가 져 오 는 코드 는 항상:

from PyPDF2 import PdfFileReader, PdfFileWriter
여기에 두 가지 방법 을 가 져 왔 습 니 다.
  • PdfFileReader는 리더
  • 로 이해 할 수 있다.
  • PdfFileWriter는 기록 기
  • 로 이해 할 수 있다.PyPDF2를 이용 하여 합병 운용 을 실현 하 는 논리:
  • 리더 가 모든 pdf 를 한 번 읽 습 니 다
  • 리더 가 읽 은 내용 을 기록 기 에 전달 합 니 다
  • 기록 기 를 새 pdf
  • 로 통일 적 으로 출력 합 니 다.
    은밀 한 지식 포인트:읽 기 는 읽 은 내용 을 한 페이지 한 페이지 만 기록 기 에 전달 할 수 있 습 니 다.
    2.2 페이지 가 져 오기 및 추가
    이전에 우리 의 트 윗 에서 이 두 가지 코드 를 언급 했 는데,아래 열거 한 것 은 복습 으로 한다.
  • .getPage특정 페이지 가 져 오기
  • .addPage특정 페이지 추가
  • 2.3 그림 과 문자 의 처리
    본 고의 수 요 를 실현 하려 면 매우 중요 한 판단 을 해 야 한다.페이지 에 포 함 된 문자 나 그림 이 있 는 지 확인 해 야 한다.
    특정한 문자 가 포함 되 어 있 는 지 여 부 를 판단 하 는 것 이 비교적 간단 합 니 다.모든 페이지 를 옮 겨 다 닐 때 포 함 된 텍스트 를 추출 하여 제출 하고 문자열 차원 의 판단 을 하면 됩 니 다.코드 사고:
  • PDF 파일 열기pdfplumber
  • 지정 한 페이지 를 가 져 오 거나 한 페이지 씩 옮 겨 다 니 기
  • .extract_text()방법 으로 현재 페이지 의 문 자 를 추출
  • '전략'이 추출 한 문자 에 있 는 지 판단
  • 그림 이 포함 되 어 있 는 지 여 부 를 판단 하 는 것 은 사고 와 위 가 비슷 하지만 방법 은 다르다.사진 은 정규 적 인 방법 으로 식별 하고fitzre의 협 조 를 고려 하여 다음 코드 를 구체 적 으로 볼 수 있다.
    03 코드 구현
    3.1 수요 1 의 실현
    먼저 필요 한 작업 을 수행 하고 필요 한 라 이브 러 리 를 가 져 옵 니 다.PDF 파일 을 읽 는PyPDF2과 텍스트 추출pdfplumber
    
    from PyPDF2 import PdfFileReader, PdfFileWriter
    import pdfplumber
    파일 이 있 는 경 로 를 지정 하고 기록 기 를 초기 화하 여 파일 을 리더 에 게 전달 합 니 다.
    
    path = r'C:\xxxxxx'
    pdf_writer = PdfFileWriter()
    pdf_reader = PdfFileReader(path + r'\    .PDF')
    컨 텍스트 관리자 형식 으로pdfplumber파일 을 열 고.getNumPages로 리더 의 최대 페이지 를 가 져 오 는 것 은 각 페이지 를 옮 겨 다 니 며 문 자 를 추출 하 는 데 유리 합 니 다.
    
    with pdfplumber.open(path + r'\    .PDF') as pdf:
        for i in range(pdf_reader.getNumPages()):
            page = pdf.pages[i]
            print(page.extract_text())
    우리 가 문 자 를 추출 하 는 목적 은 요구 에 부합 되 는 페이지 번 호 를 리더.getPage의 매개 변수 로 판단 하고 마지막 으로.addPage로 기록 기 에 전달 하 는 것 이다.
    
    with pdfplumber.open(path + r'\    .PDF') as pdf:
        for i in range(pdf_reader.getNumPages()):
            page = pdf.pages[i]
            print(page.extract_text())
            if '  ' in page.extract_text():
                pdf_writer.addPage(pdf_reader.getPage(i))
                print(i + 1, page.extract_text())
    인식 이 끝 난 후 기록 기 를 필요 한 파일 이름 으로 출력 합 니 다:
    
    with open(path + r'
    ew_ .pdf', 'wb') as out:     pdf_writer.write(out)
    이로써 우 리 는 특정 문자 콘 텐 츠 페이지 를 포함 한 추출 을 완료 하고 PDF 로 통합 했다.모든 페이지 에는'전략'이라는 두 글자 가 포함 되 어 있 습 니 다.
    Image
    Image
    필요 한 완전한 코드 는 다음 과 같 습 니 다.관심 있 는 독 자 는 스스로 연구 할 수 있 습 니 다.
    
    from PyPDF2 import PdfFileReader, PdfFileWriter
    import pdfplumber
     
    path = r'C:\xxx'
    pdf_writer = PdfFileWriter()
    pdf_reader = PdfFileReader(path + r'\    .PDF')
     
    with pdfplumber.open(path + r'\    .PDF') as pdf:
        for i in range(pdf_reader.getNumPages()):
            page = pdf.pages[i]
            print(page.extract_text())
            if '  ' in page.extract_text():
                pdf_writer.addPage(pdf_reader.getPage(i))
                print(i + 1, page.extract_text())
     
    with open(path + r'
    ew_ 1.pdf', 'wb') as out:     pdf_writer.write(out)
    3.2 수요 2 의 실현
    다음은 필요 한 두 가지 임 무 를 완수 하 겠 습 니 다.먼저 필요 한 라 이브 러 리 가 져 오기:
    
    from PyPDF2 import PdfFileReader, PdfFileWriter
    import fitz
    import re
    import os
    파일 이 있 는 경 로 를 지정 합 니 다:
    
    path = r'C:\xxxxxx'
    정규 식별 이미지 의 부분 은 자세히 설명 하지 않 습 니 다.이전의 트 윗 은 이미 소 개 했 습 니 다.우 리 는 코드 를 직접 봅 니 다.
    
    page_lst = []
    checkImg = r"/Subtype(?= */Image)"
    pdf = fitz.open(path + r'\    .PDF')
    lenXREF = pdf._getXrefLength()
     
    for i in range(lenXREF):
        text = pdf._getXrefString(i)
        isImage = re.search(checkImg, text)
        if isImage:
            page_lst.append(i)
     
    print(page_lst)
    그림 이 포 함 된 모든 페이지 를 가 져 온 다음 리더 와 기록 기의 조합 을 결합 하면 새 PDF 가 생 성 됩 니 다.이 수 요 는 모든 그림 을 단독으로 출력 하 는 것 이 므 로 페이지 를 가 져 온 후 기록 기 에 직접 파일 로 출력 하 십시오.
    
    pdf_reader = PdfFileReader(path + r'\    .PDF')
    for page in page_lst:
        pdf_writer = PdfFileWriter()
        pdf_writer.addPage(pdf_reader.getPage(page))
        with open(path + r'\    _{}.pdf'.format(page + 1), 'wb') as out:
            pdf_writer.write(out)
    이로써 두 번 째 수요 도 달성 했다.설명 할 것 은 현재 PDF 이미 지 를 완벽 하 게 추출 하 는 방법 이 없고 본 사례 에서 소개 한 방법 으로 이미 지 를 식별 하 는 것 도 불안정 하 다 는 것 이다.독 자 는 자신의 데 이 터 를 이용 하여 많이 시도 할 수 있다.전체 코드 는 다음 과 같 습 니 다:
    
    from PyPDF2 import PdfFileReader, PdfFileWriter
    import fitz
    import re
    import os
     
    path = r'C:\xxx'
     
    page_lst = []
    checkImg = r"/Subtype(?= */Image)"
    pdf = fitz.open(path + r'\    .PDF')
    lenXREF = pdf._getXrefLength()
    for i in range(lenXREF):
        text = pdf._getXrefString(i)
        isImage = re.search(checkImg, text)
        if isImage:
            page_lst.append(i)
     
    print(page_lst)
     
    pdf_reader = PdfFileReader(path + r'\    .PDF')
    for page in page_lst:
        pdf_writer = PdfFileWriter()
        pdf_writer.addPage(pdf_reader.getPage(page))
        with open(path + r'\    _{}.pdf'.format(page + 1), 'wb') as out:
            pdf_writer.write(out)
    이 두 개의 단일 수 요 를 실현 한 후에 관련 코드 를 밀봉 하고 os 등 모듈 과 결합 하여 대량 조작 을 실현 하여 두 손 을 해방 시 킬 수 있다.
    파 이 썬 이 PDF 에서 지정 한 내용 을 추출 하고 새 파일 을 만 드 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 파 이 썬 이 PDF 에서 지정 한 내용 을 추출 하 는 것 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기