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

파이썬으로 PDF 용량 줄이는 방법 2 (PDF 압축방법)

by Squat Lee 2024. 1. 19.

 

지난 포스트에 이어서 이번에도 파이썬 용량줄이기 방법에 대해서 알아보겠습니다.

 

지난번 만든 코드는 아래와 같습니다.

 

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)

 

이번에는 위에 코드에 GUI를 넣어 보도록 하겠습니다.

 

전체 코드는 아래와 같습니다.

from pypdf import PdfReader, PdfWriter
import sys
from PyQt5.QtWidgets import *
import os

class PdfCompressor(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('PdfCompressor')
        self.setGeometry(600, 200, 400, 200)

        self.btn = QPushButton('파일찾기', self)
        self.btn.move(150, 100)
        self.btn.clicked.connect(self.btn_clicked)

        lbl = QLabel('압축할 PDF를 선택하세요.', self)
        lbl.setGeometry(20, 20, 300, 20)

    def btn_clicked(self):
        try:
            file_path = QFileDialog.getOpenFileName(self)
            old_file = file_path[0]
            new_file_name = 'new-' + old_file.split('/')[-1]
            new_file = os.path.join(*old_file.split('/')[:-1], new_file_name)

            reader = PdfReader(old_file)
            writer = PdfWriter()

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

            writer.add_metadata(reader.metadata)

            with open(new_file, "wb") as fp:
                writer.write(fp)

            QMessageBox.about(self, '압축완료', 'PDF 압축이 완료되었습니다.')
        except:
            pass

if __name__=='__main__':
    app = QApplication(sys.argv)
    myWindow = PdfCompressor()
    myWindow.show()
    app.exec_()

 

 

이번에 추가된 코드를 하나씩 보도록 하겠습니다.

 

from pypdf import PdfReader, PdfWriter
import sys
from PyQt5.QtWidgets import *
import os

우선 라이브러리는 위와 같이 가져옵니다.

 

pypdf는 지난번 포스트에서 설명한대로 PDF 용량을 줄여주기 위한 모듈입니다.

 

sys와 PyQt5는 GUI를 만들기 위한 모듈이고, os는 새롭게 만들어질 파일의 경로를 설정하기 위해 쓰여집니다.

 

class PdfCompressor(QMainWindow):
    def __init__(self):
        super().__init__()
        self.btn.clicked.connect(self.btn_clicked)

    def btn_clicked(self):
  
if __name__=='__main__':
    app = QApplication(sys.argv)
    myWindow = PdfCompressor()
    myWindow.show()
    app.exec_()

GUI를 만들기 위한 대략적인 구조는 위와 같습니다.

 

윈도우창을 만들기 위해 QMainWindow를 상속받아서 PdfCompressor 클래스를 만듭니다.

 

클랙스를 실행하면 바로 시작해야 하기에 def__init__(self): 를 사용하였고, 상속받은 클래스(QMainWindow)의 모든 초기값을 가져 와야해서 super().__init__을 사용했습니다.

 

그리고 버튼을 누르면 실행하는 함수를 def btn_clicked(self): 로 구현하고 self.btn.clicked.connect(self.btn_clicked)로 연결하였습니다.

 

file_path = QFileDialog.getOpenFileName(self)
            old_file = file_path[0]
            new_file_name = 'new-' + old_file.split('/')[-1]
            new_file = os.path.join(*old_file.split('/')[:-1], new_file_name)

 QFileDialog.getOpenFileName(self)를 사용해서 파일을 선택하고, 선택한 이름을 file_path에 저장했습니다.

 

파일이름이 튜플로 오기 때문에 file_path[0] 변수에서 첫번째 항목을 가져왔습니다.

 

split('/')은 '/' 기준으로 문자를 나눈뒤 리슽트 형태로 저장됩니다. 이름을 의미하는 마지막 List 요소를 선택한 후 이름 앞에 'new-'를 붙입니다. 그리고 new_file_name이라는 변수로 저장합니다.

 

os.path.join은 리스트 형태의 문자를 파일경로 형태로 만들어줍니다. ' * '를 써야지 제대로 경로가 나오더라구요. new_file_name까지 합쳐서 새로운 경로 new_file을 만들어줍니다.

 

QMessageBox.about(self, '압축완료', 'PDF 압축이 완료되었습니다.')

압축이 완료된 후 메세지 박스가 뜨도록 했습니다.

 

이런 형태로 GUI가 나옵니다.

 

파일찾기 버튼을 누르면 열기 창이 나오고 파일을 선택할 수 있습니다.

 

압축이 완료되면 메세지창이 나옵니다.

 

실행파일도 만들었으니 필요하시면 아래 링크를 클릭하세요.(비번은 댓글로 문의하시면 알려드립니다.)

 

 

실행파일 다운로드

728x90
반응형

댓글