파이썬으로 PDF 불러오기,병합하기

반응형
    반응형

    문서를 주로 PDF 형식으로 주고받는데 PDF는 수정이 불가합니다.
    하지만 수정이 불가능한 PDF 파일의 내용은 가져올 수 있습니다.
    사실 워드에 쓰면 되는 것인데 파이썬을 쓰면 이런 일을 조금이나마 줄일 수 있을 것 같습니다.

    PDF 읽고 추출하기

    PDF 파일을 읽고 데이터를 추출하기 위해 파이썬에서는 PyPDF2, pdfminer.six, textract 등의 라이브러리를 활용할 수 있습니다. 이러한 라이브러리들은 PDF 파일을 열어서 내용을 읽고 특정한 텍스트나 이미지 데이터를 추출할 수 있는 기능을 제공합니다. 파이썬 코드를 사용하여 PDF 파일을 열고 원하는 데이터를 추출하는 작업은 데이터 분석, 텍스트 처리, 문서 요약 등 다양한 분야에서 유용하게 활용될 수 있습니다.

    PyPDF2 설치

    pypdf2라는 라이브러리를 사용해 pdf를 다뤄보겠습니다.
    먼저 설치를 합니다.

    pip install pypdf

    AES를 사용하는 PDF를 암호화 또는 해독을 위해서 추가로 설치해야합니다. 아래 명령으로 암호화 플러그인을 설치할수도 있습니다.

    pip install pypdf[crypto]

    PDF 읽기

    다음과 같이 합니다.

    from pypdf import PdfReader
    
    pdf_file = open('./RNN.pdf','rb')
    pdf_reader = PdfReader(pdf_file)
    
    #페이지수
    num_pages = len(pdf_reader.pages)
    
    #text 추출
    
    text = ''
    for page_num in range(num_pages):
        page = pdf_reader.pages[page_num]
        text += page.extract_text()
    
    print(text)

    이런식으로 나옵니다.
    단 일부는 아직 인코딩 문제로 나오지 않습니다. 이건 버전업이 되면 해결될 것 같습니다.

    암호화 여부를 확인하려면 다음과 같이 합니다.

    pdf_reader.is_encrypted

    PDF 병합하기

    여러개의 PDF도 병합할 수 있습니다.
    PdfWriter를 불러와서 아래와 같이 합니다.

    from PyPDF2 import PdfWriter
    writer = PdfWriter()
    
    for filename in ["./example.pdf","./example2.pdf"]:
        reader = PyPDF2.PdfReader(filename)
        for page in reader.pages:
            writer.add_page(page)
    
    writer.write('merge.pdf')

    위 예제는 새로운 파일을 만드는데 씁니다.

    이외에도 기존파일에서
    페이지를 삽입하고 싶다면 싶다면 insert_page() ,
    페이지를 대체하고 싶다면 replace_page()를 사용합니다.

    맨 위에 빈페이지를 추가하는 예제입니다.

    
    with open('merge.pdf', 'rb') as file:
        pdf_reader = PyPDF2.PdfReader(file)
    
        # 새로운 PDF 파일 생성을 위한 PdfWriter 객체 생성
        pdf_writer = PyPDF2.PdfWriter()
    
        # 페이지 삽입
        new_page = PyPDF2.PageObject.create_blank_page(None, 612, 792)  # 삽입할 새로운 페이지 생성
        pdf_writer.insert_page(new_page, index=0)  # 인덱스 0 위치에 페이지 삽입
    
        # 원본 페이지 추가
        for page_num in range(len(pdf_reader.pages)):
            page = pdf_reader.pages[page_num]
            pdf_writer.add_page(page)
    
        # 결과 PDF 파일 저장
        with open('output.pdf', 'wb') as output_file:
            pdf_writer.write(output_file)

    new_page는 어짜피 빈페이지라서 인덱스는 무엇으로 하던 상관없습니다. 

    마치며

    pdf에 대한 처리를 파이썬으로 어느정도 할 수 있다는 걸 약간 알게 된 것 같습니다. 아직 다 알지 못하는 탓에 여기까지 글을 써야할 것 같군요. 더 공부해서 괜찮은 것이 있으면 공유하겠습니다!

    댓글

    Designed by JB FACTORY

    ....