본문 바로가기
SW/AI

[python] ChatGPT를 이용한 PDF에서 이미지(PNG) 변환

by 규지니들 2023. 2. 5.
반응형

 

팀원들과 파이썬을 이용한 업무 자동화에 대한 회의를 진행하던 중에 신입직원이 ChatGPT를 이용하여 참조 코드를 생성하는 방법을 보았습니다. 그래서 저도 ChatGPT를 이용하여 코딩하는 것을 테스트해보았습니다.

 

영어가 조금 부족하므로 개발을 원하는 파이썬 코드의 스펙을 한글로 작성 후, 구글 번역기에서 영문으로 변환 후 검색했습니다. 

 

몇번의 시도를 거쳐 'pdf_src' 폴더안의 모든 pdf파일을 이미지로 변환해서 output폴더 안에 저장하는 코드를 개발하였고, 내용은 아래와 같습니다.

 

pdf2png_fitz.py : 'pdf_src' 폴더안의 모든 pdf파일을 이미지로 변환해서 output폴더에 저장하는 코드

pdf2png_fitz.zip
0.19MB

# -*- coding: utf-8 -*-
"""
Created on Fri Feb  3 23:05:51 2023

@author: dopant
"""

# Importing necessary libraries
import os
import fitz

def pdf_to_image(pdf_path, output_folder, filename):
    """
    Converts pdf to image format

    Parameters:
    pdf_path (str): Path to the pdf file
    output_folder (str): Path to the output folder to store the images
    filename (str): Filename of the pdf file

    Returns:
    None
    """
    # Open the pdf document using fitz
    pdf_doc = fitz.open(pdf_path)

    # Loop through all pages of the pdf document
    for page_num in range(pdf_doc.page_count):
        # Get the current page
        page = pdf_doc[page_num]
        
        # Get pixmap of the current page
        pix = page.get_pixmap(dpi=300)
        
        # Construct the output path for the image
        output_path = os.path.join(output_folder, f'page_{filename}_{page_num}.png')
        
        # Save the pixmap as an image
        pix.save(output_path)

if __name__ == '__main__':
    # Define the pdf source folder
    pdf_src = './pdf_src'

    # Define the output folder
    output_folder = 'output'

    # Check if the output folder exists, if not create it
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    # Loop through all the pdf files in the pdf source folder
    for filename in os.listdir(pdf_src):
        # Print the current filename
        print(filename)

        # Check if the current file is a pdf file
        if filename.endswith('.pdf'):
            # Construct the path to the pdf file
            pdf_path = os.path.join(pdf_src, filename)

            # Remove the '.pdf' extension from the filename
            filename = filename.replace(".pdf", "_")

            # Call the pdf_to_image function
            pdf_to_image(pdf_path, output_folder, filename)

 

ChatGPT에는 영어/한글로 질문을 할 수 있는데, 챗GPT가 한글도 대답을 하면 속도가 느리고, 영문으로 대답하면 속도가 비교적 빨랐습니다. 

 

코드 생성 요청을 할 때 원하는 스펙을 상세히 기술할수록 정확도는 높아졌으며, 테스트할 때 발생하는 에러로그를 재검색하면 이를 수정한 새로운 코드를 생성했습니다.

 

이로써

 

몇번의 수정 작업을 거쳐서 최종 코드가 생성되었는데 첫번째 검색은 아래와 같았습니다.

 

1. before.pdf 파일을 이미지로 변환하는 파이썬 코드를 작성해주세요. before.pdf를 원하는 pdf파일명으로 변경하여 아나콘다로 코드를 실행하니 에러없이 바로 이미지가 변환되었습니다. 그런데 생성된 이미지의 해상도가 낮아서 해상도를 높이고 싶어졌습니다.

2. pdf파일을 이미지로 변환할 때 텍스트 해상도를 높일 수 있는 방법을 알려주세요.

   

dpi를 설정하여 해상도를 높이는 방법을 알려줬으나, pixmap 코드 부분도 일부 수정이 되었습니다.

   

저는 기존코드 방식이 더 마음에 들어서 기존 코드에 dpi를 삽입했습니다. 그런데, 변환할 pdf를 바꿀 때마다 코드를 수정하는 것이 번거롭게 느껴져서 특정폴더 안의 모든 pdf를 이미지로 변환하고 싶어졌습니다.

3. 폴더 안의 모든 pdf 를 이미지로 변환하는 코드를 작성해주세요

갑자기 코드가 많이 바뀌었습니다. fitz를 사용했었는데 MyPDF2를 사용하는 코드로 변경이 되었네요. 조금 당황했습니다.

 

 

4. 질문을 조금 수정해서, import fitz를 이용하여 pdf_src 폴더안의 모든 pdf를 이미지로 변환하는 코드를 작성해주세요.

 

 

 

5. 위의 결과물에서 생성된 이미지의 파일네임을 pdf명으로 변경하는 코드로 일부 수정해서 첨부와 같은 최종 결과물이 완성되었으며, 주석또한 챗GPT에게 주석을 작성해달라는 명령을 통해서 주석이 작성되었습니다.

 

완성된 코드는 상황에 따라서 컴파일이 안될 수 있습니다. 이 때 발생하는 에러메시지를 재검색하면 수정된 코드를 생성해줍니다. 

요청 메시지가 간결,명확,구체적일수록 정확도가 높아지므로 이를 잘 활용하면 좀 더 빠르게 코드를 개발 할 수 있고,

초심자도 비교적 쉽게 결과물을 이끌어낼 수 있습니다.

 

다만, 생성된 코드를 분석해서 일부 수정하는 정도의 분석력은 반드시 필요합니다.

 

 

 

 

 

 

 

반응형

댓글