본문 바로가기
  • ▒ 네모의 쉽게 배우는 네트워크 | 개발 ▒
소소한 팁/알쓸잇(IT)잡

[파이썬 개발] 무료로 pdf 파일을 이미지 파일(jpg, jpeg)로 만들기

by 너l모 2021. 9. 30.
반응형

※ 업무하면서 습득한 내용들을 정리해 놓은 포스팅입니다 :P 추가로 궁금하신 점은 댓글로 남겨주시고 필요한 자료 있으면 요청주세요! 잘못된 내용이 있으면 고쳐주시면 감사하겠습니다. 자료 퍼가실 때는 출처 남겨주세요!


 ο 목차

     


    ※ 코드 보는 방법 참고

    ㅇ 달러 기호($)가 있는 경우 -> 리눅스 터미널에서 CLI 명령어 입력

    ㅇ "=#" 기호가 있는 경우 -> psql 쉘에서 명령어 입력

    ㅇ 꺽쇠가 하나 있는 경우(>) -> 윈도우 명령 프롬프트(cmd)에서 명령어 입력

    ㅇ 꺽쇠가 세개 있는 경우(>>>) -> python 쉘에서 명령어 입력


    1. 파이썬, pip 설치(윈도우)

    아래 발행글 참고하여 파이썬 및 pip 설치까지만 진행하시고, Netmiko 라이브러리 설치 부분은 무시 해주세요.

    2021.07.26 - [네트워크 운영도구 개발/업무 자동화] - [네트워크 자동화 시작하기]#1. 윈도우(Windows)에서 네트워크 자동화 환경 구성하기

     

    [네트워크 자동화 시작하기]#1. 윈도우(Windows)에서 네트워크 자동화 환경 구성하기

    ※ 업무하면서 습득한 내용들을 정리해 놓은 포스팅입니다 :P 추가로 궁금하신 점은 댓글로 남겨주시고 필요한 자료 있으면 요청주세요! 잘못된 내용이 있으면 고쳐주시면 감사하겠습니다. 자

    nem0.tistory.com

     

    리눅스는 OS 종류에 따라 패키지 관리 프로그램을 통해 파이썬과 pip를 다운받아 주세요.  


    ▶ python 및 pip 설치 확인 명령어

     

    터미널(cmd) 창을 열어 아래 명령어 입력시 오류 없이 버전이 출력되는 경우 정상

    > python --version
    > pip --version

    결과 예시)

     

     

    2. pdf2image 라이브러리 설치

    pip를 활용해서 youtube_dl 라이브러리 설치

    - 터미널(cmd) 창에서 아래 명령어 입력하여 pdf2image 라이브러리 설치

    > pip install pdf2image

    결과 예시) 

     

     

    3. pdf 파일을 img 파일로 바꿔주는 코드 작성

    1) pdf 파일이 1장인 경우 img 파일 생성 코드

    # pdf2image 모듈 import
    from pdf2image import convert_from_path
    
    # 이미지 파일로 변환할 pdf 파일 이름 변수 선언
    f = 경로포함_pdf파일이름
    
    # 이미지 파일을 저장할 디렉토리명 선언
    s = 이미지_파일_저장_디렉토리명
    
    # pdf 파일에서 img 객체 리스트 반환해서 pages 변수로 받기
    page = convert_from_path(f)
    
    # 이미지 파일 저장
    page.save(s + 이미지파일명 + '.jpg','JPEG')

     

    2) pdf 파일이 여러 장인 경우 img 파일 생성 코드

    # pdf2image 모듈 import
    from pdf2image import convert_from_path
    
    # 이미지 파일로 변환할 pdf 파일 이름 변수 선언
    f = 경로포함_pdf파일이름
    
    # 이미지 파일을 저장할 디렉토리명 선언
    s = 이미지_파일_저장_디렉토리명
    
    # pdf 파일에서 img 객체 리스트 반환해서 pages 변수로 받기
    pages = convert_from_path(f)
    
    # 이미지 파일 저장 - 페이지 순으로 이미지파일명1.jpg, 이미지파일명2.jpg...
    for i, page in enumerate(pages):
    	page.save(s + 이미지파일명 + str(i+1) + '.jpg','JPEG')

     

     

    4. 트러블슈팅

    ※ 윈도우 운영체제에서 위의 작업을 하는 경우 보통 2가지 오류를 만나게 됩니다.  각 오류에 대한 해결 방법은 아래 내용 참고 해주시면 됩니다.  

    1) SyntaxError 발생시 해결 방법

    (1) 오류 메세지 내용

    SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

     

    (2) 해결 방법1

    - 파일 경로상에 있는 '\' 기호를'/' 기호로 바꿔주기

    예시)  path = 'C:\Users\'   ->  path = 'C:/Users/'

     

    (3) 해결 방법2

    - 파일 경로 앞에 r 붙이기

    예시)  path = 'C:\Users\'   ->  path = r'C:\Users\' 

     

     

    2) pdf2image.exceptions.PDFInfoNotInstalledError 발생시 해결 방법

    (1) 오류 메세지 내용

    pdf2image.exceptions.PDFInfoNotInstalledError: Unable to get page count. Is poppler installed and in PATH?

    (2) 문제 원인

    pdf2image 모듈이 정상적으로 동작하기 위해 poppler라는 프로그램 필요

    (운영체제 별로 설치 방법이 다르기 때문에 기타 운영체제의 poppler 설치방법은 아래 링크의 How to install 부분 참고)

    https://github.com/Belval/pdf2image

     

    GitHub - Belval/pdf2image: A python module that wraps the pdftoppm utility to convert PDF to PIL Image object

    A python module that wraps the pdftoppm utility to convert PDF to PIL Image object - GitHub - Belval/pdf2image: A python module that wraps the pdftoppm utility to convert PDF to PIL Image object

    github.com

     

    (3) 해결 방법

    - 아래 깃허브에서 poppler zip 파일을 다운받은 후 압축해제 진행

    https://github.com/oschwartz10612/poppler-windows/releases/

     

    Releases · oschwartz10612/poppler-windows

    Prebuilt Poppler binaries packaged for windows with dependencies - oschwartz10612/poppler-windows

    github.com

     

    - 압축해제 한 파일 안에서 bin 파일 경로 확인(=>poppler bin 파일 경로)

    - 코드 중  아래의 convert_from_path(f) 부분을 

    # pdf 파일에서 img 객체 리스트 반환해서 pages 변수로 받기
    pages = convert_from_path(f)

    아래와 같이 변경하기 (poppler 경로 지정 옵션 추가)

    # pdf 파일에서 img 객체 리스트 반환해서 pages 변수로 받기
    pages = convert_from_path(f, poppler_path="poppler_bin_파일경로")

     

     

    poppler 프로그램의 bin 파일 경로를 추가로 지정해주면 정상적으로 사용 가능함.

     


    ※ 좋아요와 구독은 큰 힘이 됩니다. 감사합니다. 

    반응형

    댓글