본문 바로가기

Data Engineering

[Python] PPT to PDF Convert Python code

이슈 발생

ppt, pdf 문서 전처리 하던 와중에 ppt 슬라이드 전체를 img하여 전처리 하려고 했으나,

pymupdf 라이브러리 내에서 get_pixamap의 기능은 ppt 슬라이드를 이미지화하는 것이 아닌, 뭔가 이미지를 찾아

그 이미지를 추출해서 진행하는 코드같았다.

슬라이드 자체를 이미지화해야 했기 때문에 코드 수정이 필요했다.

https://pymupdf.readthedocs.io/en/latest/recipes-images.html

 

Images - PyMuPDF 1.24.1 documentation

Previous Text

pymupdf.readthedocs.io

 

배치성으로 파이프라인을 구축해야 하다보니, 로컬에서 하나하나 작업할 수 없었고, ppt를 슬라이드화 하려면 pdf로 만들어야했다.

구글링해보니 스택오버플로우에서 ppt to pdf를 하는 방법을 알려줬는데 , windows 방법이 베이스에 깔려 있었다..

안타깝게도 화자의 pc는 mac이다 ^^..

중국 사이트 바이두까지 찾아가서 검색했더니, cli 환경에서 작업할 수 있는것을 발견했고 바로 작업 진행하였다.

https://stackoverflow.com/questions/61815883/how-to-export-pptx-to-image-png-jpeg-in-python

 

How to export pptx to image (png, jpeg) in Python?

I have developed a small code in Python to generate a PPTX file. But I would like also to generate a picture in PNG or JPEG of the slide. from pptx import Presentation from pptx.util import Inches

stackoverflow.com

 

windows를 작업하는 분은 위의 스택오버플로우를 참고하면 될 것 같다.

리눅스 혹은 우분투, mac을 사용하시는 분들은 아래의 방법을 참고하면 될 것 같다.

해결방법

!apt-get install libreoffice -y
!apt-get install -y unoconv
!apt-get install fonts-nanum
!fc-cache -fv

 

위의 코드는 Linux 환경에서 LibreOffice, unoconv 및 나눔 폰트를 설치하고 최신 폰트 캐시를 업데이트하는 명령어들이다.

나눔폰트를 설치하지 않으면, 한글이 잘 보이지 않는 등 에러가 발생하여, 폰트를 설치하는 것을 추천한다.

  1. !apt-get install libreoffice -y: 이 명령어는 apt-get을 사용하여 LibreOffice를 설치하는 명령어다.
    -y 옵션은 설치 동안 나오는 모든 질문에 자동으로 "yes"로 응답하며 사용자에게 확인 메시지가 나오지 않고 설치가 진행된다.
  2. !apt-get install -y unoconv: 이 명령어는 unoconv를 설치하는 명령어다. 
    unoconv는 LibreOffice의 Python 인터페이스를 사용하여 문서를 다양한 형식으로 변환하는 데 사용되는 명령어다.
  3. !apt-get install fonts-nanum: 이 명령어는 나눔 폰트를 설치한다.
  4. !fc-cache -fv: 이 명령어는 시스템의 폰트 캐시를 업데이트한다. 새로 설치된 폰트를 시스템에 적용하기 위해 사용한다고 생각하면 된다. 
import subprocess

# libreoffice 명령어 실행
subprocess.run('libreoffice --headless --invisible --convert-to pdf test.pptx', shell=True)

Python의 subprocess 모듈을 사용하여 명령줄에서 LibreOffice를 실행하여 PPTX 파일을 PDF로 변환하는 것이다.

여기서 사용된 명령어는 다음과 같다:

  1. libreoffice: LibreOffice를 실행하는 명령어다.
  2. --headless: LibreOffice를 GUI(그래픽 사용자 인터페이스) 없이 실행하도록 지정하는 옵션입니다. 이 옵션을 사용하면 LibreOffice가 백그라운드에서 실행된다.
  3. --invisible: LibreOffice를 실행할 때 GUI 창을 표시하지 않도록 하는 옵션이다.
  4. --convert-to pdf: 변환할 파일 형식을 지정하는 옵션입니다. 여기서는 PPTX 파일을 PDF로 변환하도록 지정하고 있다.
  5. test.pptx: 변환할 대상 파일의 경로 및 파일 이름입니다. 여기서는 test.pptx라는 파일을 변환한다.

정리하자면, subprocess.run() 함수를 사용하여 명령어를 실행하고, shell=True 옵션을 사용하여 셸에서 명령어를 실행하도록 한다.

이 코드를 실행하면, test.pptx 파일이 현재 작업 디렉토리에 있는 경우 LibreOffice가 해당 파일을 PDF로 변환하고 결과 파일을 생성한다.

--outdir 로 결과 경로도 지정할 수 있으니 참고 바란다.

 

반응형