지난 포스트에 이어서 PDF 용량 줄이는 방법을 조금 더 업그레이드 했습니다.
전체 코드는 아래와 같습니다.
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 writer.pages:
page.compress_content_streams()#무손실 압축방식
for img in page.images:
img.replace(img.image, quality=80)#이미지 해상도 줄이기
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_()
지난번 코드와 다른 점은 무손실 압축방식을 추가했고, 이미지 해상도도 줄였습니다.
for page in writer.pages:
page.compress_content_streams()#무손실 압축방식
for img in page.images:
img.replace(img.image, quality=80)#이미지 해상도 줄이기
pypdf 문서에서 compress_content_streams() 메소드를 사용하면 원본과 달라짐이 없지만 용량은 줄어든다고 합니다.
이미지 해상도도 줄여서 좀 더 줄일 수 있도록 했습니다.
압축을 하는 방식은 이전 포스트와 동일합니다.
파일을 찾아서 선택해 주면 됩니다.
압축이 완료되면 메세지 창이 뜹니다.
원래 파일의 용량이 크지 않고, 이미지도 없어서 크게 줄여지진 않네요.
좀 더 큰 용량의 파일은 획기적으로 줄어들거라 생각이 듭니다.
실행파일은 아래 링크에 공유하도록 하겠습니다. 필요하시면 다운로드 받아 가세요.
비번은 비밀댓글로 물어보시기 바랍니다.
무료 PDF 압축 프로그램 다운로드 받기
728x90
'파이썬(Python) > 파이썬 개발' 카테고리의 다른 글
파이썬으로 여러 PDF 합치는 방법 (0) | 2024.01.24 |
---|---|
무료PDF압축 프로그램 다운로드(파이썬으로 여러 PDF 파일 한번에 용량 줄이는 방법) (4) | 2024.01.23 |
파이썬으로 PDF 용량 줄이는 방법 2 (PDF 압축방법) (1) | 2024.01.19 |
파이썬으로 PDF 용량 줄이기(PDF 압축) (1) | 2024.01.18 |
파이썬으로 동영상을 GiF 파일로 변환하는 프로그램 만들기(업그레이드) (1) | 2024.01.16 |
댓글