앞에서 ChatGPT가 작성한 코드로 PDF 파일을 병합할 수 있지만, ChatGPT에 여러 가지 기능을 추가 요청해보겠습니다.
새로운 chat에서는 기존 프로그램 소스를 이해할 수 없기 때문에, 기존 chat에서 계속 질문과 답변을 주고받는 것이 좋습니다. 만약 새로운 chat을 사용해야 하는 경우에는, 기존 chat에서 작성한 코드를 ChatGPT에 알려주고 질문을 계속하면 됩니다.
1. pdf 파일을 병합하는 파이썬 GUI 프로그램 작성을 요청합니다.

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 파일 목록 보기

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. 기능 추가 요청 - 병합 결과 출력 요청

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 파일 순서 변경 요청

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

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에 다시 요청합니다.

아래는 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()
참고자료
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 12 | [파이썬]네트워크 엔지니어를 위한 파이썬 프로그래밍-01-1.설치하기(윈도우) | 관리자 | 2024.11.14 | 509 |
| 11 | [파이썬]네트워크 엔지니어를 위한 파이썬 프로그래밍-01.설치하기 | 관리자 | 2024.11.14 | 370 |
| 10 | [파이썬]네트워크 엔지니어를 위한 파이썬 프로그래밍-소개 | 관리자 | 2024.11.14 | 439 |
| » |
[파이썬]ChatGPT를 이용해서 PDF파일 병합 프로그램 만들기 (2) 기능추가
| 관리자 | 2023.03.28 | 530 |
| 8 |
[파이썬]ChatGPT를 이용해서 PDF파일 병합 프로그램 만들기
| 관리자 | 2023.03.27 | 465 |
| 7 |
[파이썬]mysqlclient 설치파일
| 관리자 | 2020.09.14 | 344 |
| 6 |
[Git][비주얼스튜디오코드]환경설정
| 관리자 | 2020.04.14 | 5170 |
| 5 |
[파이썬]티베로 DB 연결 설정, 샘플소스
| 관리자 | 2020.04.08 | 3347 |
| 4 | [파이썬]ftp 파일 다운로드, 업로드 | 관리자 | 2020.04.07 | 12245 |
| 3 | [파이썬]문자열 포맷팅(출력) 4가지 방법 | 관리자 | 2020.04.07 | 394 |
| 2 |
[파이썬][비주얼스튜디오코드]설정 초기화
| 관리자 | 2020.04.07 | 5130 |
| 1 |
[파이썬][비주얼스튜디오코드] 설치 및 환경설정
| 관리자 | 2020.04.07 | 11706 |

