반응형
pdf 분할, 페이지 삭제 프로그램 공유합니다.
https://drive.google.com/file/d/1KKY4T5HZVHhafiQ-J6HWBiF8i1sTl536/view?usp=drive_link
간단하게 뚝딱 뚝딱 만들어봤네요..
merge 하려면 add PDF를 한다음 up/down / remove 하여 정렬한다음 Merge PDFs 누르면 되고요..
특정 페이지 삭제하려면 Delete Page 버튼 누르고 파일 선택, 페이지 선택하면 해당 페이지만 삭제됩니다.
날림으로 만든거라 추후 업데이트는 없을 예정입니다.
python 으로 제작되었습니다. 소스코드 첨부
import sys
from PySide2.QtWidgets import (QApplication, QWidget, QVBoxLayout, QPushButton, QLabel,
QListWidget, QFileDialog, QMessageBox, QInputDialog)
from PySide2.QtGui import QPixmap
from PyPDF2 import PdfMerger, PdfReader, PdfWriter
class PDFMergerApp(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle('PDF Merger')
self.setGeometry(100, 100, 400, 300)
self.layout = QVBoxLayout()
# 이미지 로드
pixmap = QPixmap('2s.jpg')
label = QLabel(self)
label.setPixmap(pixmap)
self.layout.addWidget(label) # 레이아웃에 라벨 추가
self.button_add = QPushButton('Add PDF', self)
self.button_add.clicked.connect(self.add_pdf)
self.layout.addWidget(self.button_add)
self.button_up = QPushButton('Move Up', self)
self.button_up.clicked.connect(self.move_up)
self.layout.addWidget(self.button_up)
self.button_down = QPushButton('Move Down', self)
self.button_down.clicked.connect(self.move_down)
self.layout.addWidget(self.button_down)
self.button_remove = QPushButton('Remove PDF', self)
self.button_remove.clicked.connect(self.remove_pdf)
self.layout.addWidget(self.button_remove)
self.button_merge = QPushButton('Merge PDFs', self)
self.button_merge.clicked.connect(self.merge_pdfs)
self.layout.addWidget(self.button_merge)
self.button_delete_page = QPushButton('Delete Page', self) # 페이지 삭제 버튼 추가
self.button_delete_page.clicked.connect(self.delete_page)
self.layout.addWidget(self.button_delete_page)
self.list_widget = QListWidget(self)
self.layout.addWidget(self.list_widget)
# 저작권 표시 추가
copyright_label = QLabel('Copyright (c) two-s.co.kr. All rights reserved.', self)
self.layout.addWidget(copyright_label)
self.setLayout(self.layout)
def add_pdf(self):
file_paths, _ = QFileDialog.getOpenFileNames(self, "Add PDF Files", "", "PDF Files (*.pdf)")
if file_paths:
for file_path in file_paths:
self.list_widget.addItem(file_path)
def remove_pdf(self):
for item in self.list_widget.selectedItems():
self.list_widget.takeItem(self.list_widget.row(item))
def move_up(self):
current_row = self.list_widget.currentRow()
if current_row > 0:
item = self.list_widget.takeItem(current_row)
self.list_widget.insertItem(current_row - 1, item)
self.list_widget.setCurrentRow(current_row - 1)
def move_down(self):
current_row = self.list_widget.currentRow()
if current_row < self.list_widget.count() - 1:
item = self.list_widget.takeItem(current_row)
self.list_widget.insertItem(current_row + 1, item)
self.list_widget.setCurrentRow(current_row + 1)
def merge_pdfs(self):
if self.list_widget.count() > 0:
merger = PdfMerger()
for index in range(self.list_widget.count()):
merger.append(self.list_widget.item(index).text())
output_file, _ = QFileDialog.getSaveFileName(self, "Save Merged PDF", "", "PDF Files (*.pdf)")
if output_file:
merger.write(output_file)
merger.close()
QMessageBox.information(self, "Success", "PDFs merged successfully!")
else:
QMessageBox.warning(self, "Error", "Please select PDFs to merge.")
def delete_page(self):
file_path, _ = QFileDialog.getOpenFileName(self, "Select PDF File", "", "PDF Files (*.pdf)")
if file_path:
reader = PdfReader(file_path)
page_count = len(reader.pages)
items = [str(i+1) for i in range(page_count)]
item, ok = QInputDialog.getItem(self, "Delete Page", "Select page number to delete:", items, 0, False)
if ok and item:
page_number = int(item)
writer = PdfWriter()
for i in range(page_count):
if i != page_number - 1: # 삭제할 페이지 번호를 제외하고 추가
writer.add_page(reader.pages[i])
output_file, _ = QFileDialog.getSaveFileName(self, "Save PDF", "", "PDF Files (*.pdf)")
if output_file:
with open(output_file, "wb") as f:
writer.write(f)
QMessageBox.information(self, "Success", "Page deleted successfully!")
else:
QMessageBox.warning(self, "Error", "No page selected.")
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = PDFMergerApp()
ex.show()
sys.exit(app.exec_())
# Copyright (c) two-s.co.kr. All rights reserved.
|
반응형
'프로그램&회로' 카테고리의 다른 글
DeepSeek vs copilot (0) | 2025.01.28 |
---|---|
아날로그 시계 코딩하기 (0) | 2025.01.24 |
PDF merge & page delete 예제 (0) | 2025.01.13 |
pyinstaller 고급지게 사용하기 (0) | 2025.01.13 |
touchgfx snprintfFloat, snprintfFloats (0) | 2024.12.16 |