2025-04-25

AddPdf With Python and PyQt

간단한 프로그램. 연습 삼아 만들어 봄.

pdftk 프로그램 설치. 사실 pdftk 만으로도 pdf 파일 합치는 건 가능하다. 명령어 치는 게 귀찮을 뿐.

GUI 프로그램을 만들어 보자.

창 하나. 그 창 안에 버튼 하나. 버튼 누르면 합칠 pdf 파일들을 선택하게 한다. 선택한 pdf 파일들을 합쳐서 새 파일 하나 만들기.

말로는 간단한데 프로그램 만드는 것은 말처럼 쉽지는 않다.

인공지능의 도움을 받아 프로그램 완성. 처음 프로그램 하는데 그 과정에서 에러가 안 나면 오히려 이상한 일. 에러 해결 역시 인공지능의 도움을 받음. 아래는 그 소스 코드.

import sys

import subprocess

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QFileDialog, QMessageBox, QVBoxLayout

class PDFMerger(QWidget):

    def __init__(self):

        super().__init__()

        self.init_ui()

    def init_ui(self):

        self.setWindowTitle('PDF 합치기 도구')

        self.setGeometry(100, 100, 300, 100)

        self.button = QPushButton('PDF 합치기', self)

        self.button.clicked.connect(self.merge_pdfs)

        layout = QVBoxLayout()

        layout.addWidget(self.button)

        self.setLayout(layout)

    def merge_pdfs(self):

        files, _ = QFileDialog.getOpenFileNames(

            self,

            "PDF 파일 선택",

            "",

            "PDF Files (*.pdf)"

        )

        if not files:

            return

        save_path, _ = QFileDialog.getSaveFileName(

            self,

            "저장할 파일 이름",

            "merged.pdf",

            "PDF Files (*.pdf)"

        )

        if not save_path:

            return

        try:

            # pdftk 명령어로 파일 합치기

            command = ['pdftk'] + files + ['cat', 'output', save_path]

            subprocess.run(command, check=True)

            QMessageBox.information(self, "성공", f"PDF가 성공적으로 저장되었습니다:\n{save_path}")

        except subprocess.CalledProcessError:

            QMessageBox.critical(self, "오류", "PDF를 합치는 중 오류가 발생했습니다.")

if __name__ == '__main__':

    app = QApplication(sys.argv)

    merger = PDFMerger()

    merger.show()

    sys.exit(app.exec_())

댓글 없음:

댓글 쓰기