파이썬으로 PDF 용량 줄이기(PDF 압축)
본문 바로가기
파이썬(Python)/파이썬 개발

파이썬으로 PDF 용량 줄이기(PDF 압축)

by Squat Lee 2024. 1. 18.

PDF를 E-Mail로 보내거나, 출력을 할때 가끔씩 파일크기가 너무 커서 잘 안되는 경우가 있습니다.
 

이때는 인터넷 사이트에서  PDF용량을 줄여서 작업을 수행하면 됩니다.
 

 
하지만 회원가입을 하고, 로그인을 하는 등 상당히 번거롭죠. 더욱이 횟수가 제한되어 있어요.
 
그래서 파이썬으로 만들어 봤습니다.
 

from pypdf import PdfReader, PdfWriter

reader = PdfReader("big-old-file.pdf")
writer = PdfWriter()

for page in reader.pages:
    writer.add_page(page)

writer.add_metadata(reader.metadata)

with open("smaller-new-file.pdf", "wb") as fp:
    writer.write(fp)

 
코드가 간단하죠?
 
pypdf 모듈을 사용해서 만들었습니다.
 
pypdf문서(pypdf.readthedocs.io)

Reduce PDF File Size — pypdf 3.17.4 documentation

© Copyright 2006 - 2023, Mathieu Fenniak and pypdf contributors. Revision 54a30cb2.

pypdf.readthedocs.io

 
pypdf 문서를 보면 pypdf를 통해 읽는것 만으로도 작동이 잘 되면 86% 용량을 줄일 수 있다고 하네요.(5.7MB을 0.8MB로)
 
하나씩 코드를 살펴 보도록 하겠습니다.
 

from pypdf import PdfReader, PdfWriter

pypdf 모듈에서 pdfReader와 pdfWriter 클래스를 가져옵니다.
 

reader = PdfReader("big-old-file.pdf")
writer = PdfWriter()

PdfReader 클래스에 용량을 줄이기 전 pdf 위치를 인자로 넣고, reader 인스턴스를 생성합니다.
PdfWriter도 writer로 인스턴스를 생성합니다.
 

for page in reader.pages:
    writer.add_page(page)

선택한 PDF파일의 각 페이지를 읽고, writer에 다시 같은 페이지를 생성합니다.
 

writer.add_metadata(reader.metadata)

읽은 메타 데이터를 새로운 writer에 추가해줍니다.
 

with open("smaller-new-file.pdf", "wb") as fp:
    writer.write(fp)

'smaller-new-file.pdf'로 새로운 파일을 만든 다음 아까 writer로 만든 내용을 입력해서 저장합니다.
 

 
docs에서 설명한 만큼(86%) 드라마틱하게 용량이 줄어들진 않네요. PDF 파일마다 차이가 있는 것 같습니다.
 
다음 포스트에서는 이것을 좀 더 쉽게 사용할 수 있도록 UI를 만들어 보도록 하겠습니다.
 
 

728x90
반응형

댓글