ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [python-pptx] 파이썬으로 ppt 파일 자동으로 만드는 방법 알아보기
    Python/파이썬 기초 2024. 10. 30. 18:29
    반응형

    python-pptx를 이용해서 ppt 파일 자동으로 만들기


    파이썬(Python)을 이용한 업무 자동화 중 가장 인기가 높은 분야는 자동 문서 생성이라고 생각합니다. 다양한 양식을 손쉽게 생성할 수 있기 때문에, 잘만 한다면 데이터가 생성되는 즉시 보고서나 발표자료를 만들고 발송하는 등의 활용이 가능하거든요. 이번에는 그중에서 python-pptx라는 패키지를 이용해서 ppt 파일 자동 생성하는 방법을 알아보도록 하겠습니다.

     

     

    프로그램 구성하기


    python-pptx는 ppt 파일에 대응하는 프레젠테이션 객체 안에, 원하는 슬라이드를 추가하는 방식으로 구성할 수 있습니다. 이 때, 특정한 양식에 맞춰서 줄글을 적으면 자동으로 제목과 본문, 슬라이드 구분을 할 수 있도록 프로그래밍을 할 수 있지요. 이번에는 아래 양식에 맞춰서 ppt 파일을 만들어 보는 프로그램을 만들어 보도록 하겠습니다.

     

    • 들여쓰기 없는 글은 제목으로 설정한다
    • 탭(\t) 문자로 들여쓰기가 있는 글은 본문으로 설정한다
    • 빈 줄이 인식된다면 새로운 페이지를 만든다

     

    이번에는 아래 문서를 복사해서 test.txt 파일로 저장한 뒤, 이용해서 두 쪽짜리 ppt 파일을 만들어 보도록 하겠습니다. 각각 '과잉치 발치란 무엇인가요?', '과잉치 발치 주요 산정 기준'이 제목으로 설정된 슬라이드가 생성되겠지요?

     

     

    과잉치 발치란 무엇인가요?
        과잉치 발치 : 정상적인 치아 갯수보다 많은 치아를 과잉치라고 합니다.  발치 과정은 과잉치의 위치나 상태에 따라 달라질 수 있으며, 이에 적용 가능한 상병명과 산정 기준을 완벽 정리해 드립니다.
    
    과잉치 발치 주요 산정 기준
        일반적인 과잉치 발치 시에는 발치 원인 상병명을 적용합니다.
        매복 과잉치 발치 시에는 반드시 K01.18 과잉매복치 상병명만 적용할 수 있습니다.
        과잉치에 인접한 치아의 치식을 선택하여 청구하며, 매복 상태와 발치 난이도에 따라 청구가 달라집니다.
        매복 사랑니와 과잉치를 동시에 각각 발치하는 경우, 매복사랑니 상병명과 과잉치 상병명을 각각 적용하여 청구합니다.

     

     

    코드 알아보기


    python-pptx를 설치하지 않은 분들이라면, 터미널 명령어로 pip install python-pptx 를 입력해서 패키지 설치를 해 주시고, 파이썬에서는 pptx라는 이름으로 불러오면 됩니다.

     

     

    이 때, 각 페이지를 만드는데 필요한 용어를 몇 개 알아두면 좋습니다.

     

    • 프레젠테이션을 정의하는 클래스는 pptx.Presentation 로 정의되어 있으며,
    • 화면 크기를 정의하는 클래스는 pptx.util.Inches 로 정의되어 있습니다
    • 각 페이지 레이아웃은 Presentation.slide_layouts([n]) 함수를 이용할 수 있으며, 여기서 매개변수 n은 새 슬라이드 만들기의 레이아웃 순서와 동일합니다.

    # import package
    from pptx import Presentation
    from pptx.util import Inches
    
    # 10*7.5인치 화면 생성
    prs = Presentation()
    prs.slide_width = Inches(10)
    prs.slide_height = Inches(7.5)
    
    # txt 파일 읽기
    with open('parsed_output.txt', 'r', encoding='utf-8') as file:
        lines = file.readlines()
    
    # 슬라이드 제목 및 내용 추가
    title = None
    content = []
    for line in lines:
        line = line.strip()
    
        if not line and title:
            # 빈 줄이 나올 경우 새 슬라이드 추가
            slide = prs.slides.add_slide(prs.slide_layouts[1])  # 제목 및 내용 레이아웃
            slide.shapes.title.text = title
            slide.shapes.placeholders[1].text = "\n".join(content)
    
            # 초기화
            title = None
            content = []
        elif title is None:  # 제목 줄
            title = line
        else:  # 내용 줄
            content.append(line)
    
    # 마지막 슬라이드 추가
    if title:
        slide = prs.slides.add_slide(prs.slide_layouts[1])
        slide.shapes.title.text = title
        slide.shapes.placeholders[1].text = "\n".join(content)
    
    # pptx 파일 저장
    prs.save('test.pptx')
    print(f"'ppt 파일이 생성되었습니다.")
    'ppt 파일이 생성되었습니다.

     

     

    이렇게 만들어진 test.ppt 파일은 아래와 같이 생성됩니다.

    반응형

    댓글

문의: jwkang3929@naver.com