메뉴 건너뛰기

앞에서 ChatGPT가 작성한 코드로 PDF 파일을 병합할 수 있지만, ChatGPT에 여러 가지 기능을 추가 요청해보겠습니다.

 

새로운 chat에서는 기존 프로그램 소스를 이해할 수 없기 때문에, 기존 chat에서 계속 질문과 답변을 주고받는 것이 좋습니다. 만약 새로운 chat을 사용해야 하는 경우에는, 기존 chat에서 작성한 코드를 ChatGPT에 알려주고 질문을 계속하면 됩니다.

 

 

 

1. pdf 파일을 병합하는 파이썬 GUI 프로그램 작성을 요청합니다.

 

pdfmerge-01.png

 

 

import PyPDF2
import tkinter as tk
from tkinter import filedialog

class PDFMerger:
    def __init__(self, master):
        self.master = master
        master.title("PDF Merger")

        self.file_list = []

        self.add_button = tk.Button(master, text="Add PDF files", command=self.add_files)
        self.add_button.pack()

        self.merge_button = tk.Button(master, text="Merge PDF files", command=self.merge_files)
        self.merge_button.pack()

    def add_files(self):
        files = filedialog.askopenfilenames(filetypes=[("PDF files", "*.pdf")])
        self.file_list.extend(files)

    def merge_files(self):
        if len(self.file_list) == 0:
            return

        merger = PyPDF2.PdfMerger()

        for file in self.file_list:
            merger.append(file)

        save_file = filedialog.asksaveasfilename(defaultextension=".pdf")
        merger.write(save_file)

        self.file_list = []

root = tk.Tk()
app = PDFMerger(root)
root.mainloop()

 

 

 

 


2. 기능 추가 요청 - PDF 파일 목록 보기

 

pdfmerge-02.png

 

mport tkinter as tk
from tkinter import filedialog
import PyPDF2

class PDFMerger:
    def __init__(self, master):
        self.master = master
        master.title("PDF Merger")

        self.file_list = []

        self.add_button = tk.Button(master, text="Add PDF files", command=self.add_files)
        self.add_button.pack()

        self.listbox = tk.Listbox(master)
        self.listbox.pack()

        self.merge_button = tk.Button(master, text="Merge PDF files", command=self.merge_files)
        self.merge_button.pack()

    def add_files(self):
        files = filedialog.askopenfilenames(filetypes=[("PDF files", "*.pdf")])
        self.file_list.extend(files)

        # 파일 목록을 리스트 박스에 표시
        self.listbox.delete(0, tk.END)
        for file in self.file_list:
            self.listbox.insert(tk.END, file)

    def merge_files(self):
        if len(self.file_list) == 0:
            return

        merger = PyPDF2.PdfMerger()

        for file in self.file_list:
            merger.append(file)

        save_file = filedialog.asksaveasfilename(defaultextension=".pdf")
        merger.write(save_file)

        self.file_list = []

        # 리스트 박스 초기화
        self.listbox.delete(0, tk.END)

root = tk.Tk()
app = PDFMerger(root)
root.mainloop()

 

 

 

 

 

3. 기능 추가 요청 - 병합 결과 출력 요청

 

pdfmerge-03.png

 

mport tkinter as tk
from tkinter import filedialog
import PyPDF2

class PDFMerger:
    def __init__(self, master):
        self.master = master
        master.title("PDF Merger")

        self.file_list = []

        self.add_button = tk.Button(master, text="Add PDF files", command=self.add_files)
        self.add_button.pack()

        self.listbox = tk.Listbox(master)
        self.listbox.pack()

        self.merge_button = tk.Button(master, text="Merge PDF files", command=self.merge_files)
        self.merge_button.pack()

        self.result_label = tk.Label(master, text="")
        self.result_label.pack()

    def add_files(self):
        files = filedialog.askopenfilenames(filetypes=[("PDF files", "*.pdf")])

        for file in files:
            self.file_list.append(file)
            self.listbox.insert(tk.END, file.split("/")[-1])

    def merge_files(self):
        if len(self.file_list) == 0:
            self.result_label.config(text="Please select PDFs to merge.", fg="red")
            return

        merger = PyPDF2.PdfMerger()

        for file in self.file_list:
            merger.append(file)

        save_file = filedialog.asksaveasfilename(defaultextension=".pdf")
        merger.write(save_file)

        self.file_list = []

        # 리스트 박스 초기화
        self.listbox.delete(0, tk.END)

        self.result_label.config(text="PDFs merged successfully!", fg="green")


root = tk.Tk()
pdf_merger = PDFMerger(root)
root.mainloop()

 

 

 

 

 

4. 기능 추가 요청 - pdf 파일 순서 변경 요청

 

pdfmerge-04.png

 

ChatGPT에 랙이 있거나, 코드가 길 경우 출력이 멈추는 경우가 있습니다. 다시 실행해도 계속해서 출력이 멈출 때는 다시 출력 요청 질문을 합니다.

 

pdfmerge-05.png

 

import PyPDF2
import tkinter as tk
from tkinter import filedialog, messagebox

class PDFMerger:
    def __init__(self, master):
        self.master = master
        master.title("PDF Merger")

        # Add widgets
        self.button_add = tk.Button(master, text="Add PDF", command=self.add_pdf)
        self.button_add.pack(padx=10, pady=5)

        self.button_up = tk.Button(master, text="Move Up", command=self.move_up)
        self.button_up.pack(padx=10, pady=5)

        self.button_down = tk.Button(master, text="Move Down", command=self.move_down)
        self.button_down.pack(padx=10, pady=5)

        self.button_remove = tk.Button(master, text="Remove PDF", command=self.remove_pdf)
        self.button_remove.pack(padx=10, pady=5)

        self.button_merge = tk.Button(master, text="Merge PDFs", command=self.merge_pdfs)
        self.button_merge.pack(padx=10, pady=5)

        self.listbox = tk.Listbox(master)
        self.listbox.pack(padx=10, pady=5)

    def add_pdf(self):
        file_path = filedialog.askopenfilename(filetypes=[("PDF Files", "*.pdf")])
        if file_path:
            self.listbox.insert(tk.END, file_path)

    def remove_pdf(self):
        index = self.listbox.curselection()
        if index:
            self.listbox.delete(index)

    def merge_pdfs(self):
        if self.listbox.size() > 0:
            merger = PyPDF2.PdfMerger()
            for pdf in self.listbox.get(0, tk.END):
                merger.append(pdf)

            output_file = filedialog.asksaveasfilename(defaultextension=".pdf")
            if output_file:
                merger.write(output_file)
                merger.close()
                messagebox.showinfo("Success", "PDFs merged successfully!")
        else:
            messagebox.showerror("Error", "Please select PDFs to merge.")

    def move_up(self):
        selected = self.listbox.curselection()
        if selected:
            if selected[0] > 0:
                self.listbox.insert(selected[0]-1, self.listbox.get(selected[0]))
                self.listbox.delete(selected[0]+1)
                self.listbox.selection_clear(0, tk.END)
                self.listbox.selection_set(selected[0]-1)

    def move_down(self):
        selected = self.listbox.curselection()
        if selected:
            if selected[0] < self.listbox.size()-1:
                self.listbox.insert(selected[0]+2, self.listbox.get(selected[0]))
                self.listbox.delete(selected[0])
                self.listbox.selection_clear(0, tk.END)
                self.listbox.selection_set(selected[0]+1)

root = tk.Tk()
pdf_merger = PDFMerger(root)
root.mainloop()

 

 

 

 

 

5. 기능 추가 요청 - ctrl 키로 pdf 파일 여러 개 선택 요청

 

앞에서 말씀드렸지만, ChatGPT가 완벽하지 않습니다. 질문과 답변을 주고받다 보면, 처음에 작성해준 코드와 전혀 다른 코드를 답변하기도 합니다. 이런 경우에는 기존 코드를 함해서 질문을 할 수도 있습니다.

 

3번 기능 추가 후, ctrl 키로 pdf 파일 여러 개 선택하는 기능이 사라져서 ChatGPT에 다시 요청합니다.

 

pdfmerge-06.png

 

아래는 ChatGPT가 여러 기능을 추가해서 최종적으로 작성한 pdf 파일을 병합하는 GUI 프로그램 코드입니다.

 

import PyPDF2
import tkinter as tk
from tkinter import filedialog, messagebox

class PDFMerger:
    def __init__(self, master):
        self.master = master
        master.title("PDF Merger")

        # Add widgets
        self.button_add = tk.Button(master, text="Add PDF", command=self.add_pdf)
        self.button_add.pack(padx=10, pady=5)

        self.button_up = tk.Button(master, text="Move Up", command=self.move_up)
        self.button_up.pack(padx=10, pady=5)

        self.button_down = tk.Button(master, text="Move Down", command=self.move_down)
        self.button_down.pack(padx=10, pady=5)

        self.button_remove = tk.Button(master, text="Remove PDF", command=self.remove_pdf)
        self.button_remove.pack(padx=10, pady=5)

        self.button_merge = tk.Button(master, text="Merge PDFs", command=self.merge_pdfs)
        self.button_merge.pack(padx=10, pady=5)

        self.listbox = tk.Listbox(master)
        self.listbox.pack(padx=10, pady=5)

    def add_pdf(self):
        file_paths = filedialog.askopenfilenames(filetypes=[("PDF Files", "*.pdf")])
        for file_path in file_paths:
            if file_path:
                self.listbox.insert(tk.END, file_path)

    def remove_pdf(self):
        index = self.listbox.curselection()
        if index:
            self.listbox.delete(index)

    def merge_pdfs(self):
        if self.listbox.size() > 0:
            merger = PyPDF2.PdfMerger()
            for pdf in self.listbox.get(0, tk.END):
                merger.append(pdf)

            output_file = filedialog.asksaveasfilename(defaultextension=".pdf")
            if output_file:
                merger.write(output_file)
                merger.close()
                messagebox.showinfo("Success", "PDFs merged successfully!")
        else:
            messagebox.showerror("Error", "Please select PDFs to merge.")

    def move_up(self):
        selected = self.listbox.curselection()
        if selected:
            if selected[0] > 0:
                self.listbox.insert(selected[0]-1, self.listbox.get(selected[0]))
                self.listbox.delete(selected[0]+1)
                self.listbox.selection_clear(0, tk.END)
                self.listbox.selection_set(selected[0]-1)

    def move_down(self):
        selected = self.listbox.curselection()
        if selected:
            if selected[0] < self.listbox.size()-1:
                self.listbox.insert(selected[0]+2, self.listbox.get(selected[0]))
                self.listbox.delete(selected[0])
                self.listbox.selection_clear(0, tk.END)
                self.listbox.selection_set(selected[0]+1)

root = tk.Tk()
pdf_merger = PDFMerger(root)
root.mainloop()

 

 

 

참고자료

[위키독스]ChatGPT를 이용한 파이썬 프로그래밍