k1dr0ck

merge pdf files

Nov 27th, 2023
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.18 KB | Software | 0 0
  1. import flet as ft
  2. import PyPDF2
  3. from PyPDF2 import PdfWriter
  4.  
  5. merger = PdfWriter()
  6.  
  7.  
  8. def main(page: ft.page):
  9.  
  10.     def close_banner(e):
  11.         page.banner.open = False
  12.         page.update()
  13.  
  14.     def show_banner(e):
  15.         page.banner.open = True
  16.         page.update()
  17.  
  18.     def merge_pdfs(e: ft.FilePickerResultEvent):
  19.  
  20.         # get file name and password from the corresponding textfields
  21.         merge_file_name = textField_name.value
  22.         file_password = textField_password1.value
  23.  
  24.         # show warning when no filename is provided
  25.         if not merge_file_name or merge_file_name == ' ':
  26.             # banner for when there is error in file name or file selection
  27.             page.banner = ft.Banner(
  28.                 bgcolor=ft.colors.RED_500,
  29.                 leading=ft.Icon(ft.icons.WARNING_AMBER_ROUNDED,
  30.                                 color=ft.colors.AMBER, size=40),
  31.                 content=ft.Text("Please check the file name entered."),
  32.                 actions=[ft.TextButton("Dismiss", on_click=close_banner)])
  33.             show_banner(e)
  34.             return None
  35.  
  36.         # show warning if less than 2 files selected
  37.         if not e.files or len(e.files) < 2:
  38.             # banner for when there is error in file name or file selection
  39.             page.banner = ft.Banner(
  40.                 bgcolor=ft.colors.RED_500,
  41.                 leading=ft.Icon(ft.icons.WARNING_AMBER_ROUNDED,
  42.                                 color=ft.colors.AMBER, size=40),
  43.                 content=ft.Text("Please select at least 2 files."),
  44.                 actions=[ft.TextButton("Dismiss", on_click=close_banner)])
  45.             show_banner(e)
  46.             return None
  47.  
  48.         # merge all selected pdf files
  49.         for pdf_file in e.files:
  50.             merger.append(pdf_file.name)
  51.  
  52.         # check if user provided password
  53.         if file_password:
  54.             merger.encrypt(file_password, use_128bit=True)
  55.  
  56.         # save new pdf file using value of entry input
  57.         merger.write(merge_file_name + ".pdf")
  58.         merger.close()
  59.  
  60.         # show messagebox merger is complete
  61.         page.snack_bar = ft.SnackBar(ft.Text("PDF file merge complete."))
  62.         page.snack_bar.open = True
  63.         page.update()
  64.  
  65.     pick_files_dialog = ft.FilePicker(on_result=merge_pdfs)
  66.     page.overlay.append(pick_files_dialog)
  67.  
  68.     page.title = "Merge PDF"
  69.     page.icon = ft.icons.INFO
  70.     page.window_width = 320
  71.     page.window_height = 300
  72.     page.bgcolor = "gray"
  73.     page.window_center()
  74.     page.window_resizable = False
  75.     page.vertical_alignment = "center"
  76.     page.horizontal_alignment = "center"
  77.  
  78.     textField_name = ft.TextField(
  79.         label="File Name",
  80.         autofocus=True,
  81.         width=250,
  82.         bgcolor="gray",
  83.         color="yellow",
  84.         border_color="yellow")
  85.  
  86.     textField_password1 = ft.TextField(
  87.         label="Optional Password",
  88.         password=True,
  89.         can_reveal_password=True,
  90.         autofocus=True,
  91.         width=250,
  92.         bgcolor="gray",
  93.         color="yellow",
  94.         border_color="yellow")
  95.  
  96.     select_merge_button = ft.ElevatedButton("Select and Merge",
  97.                                             icon=ft.icons.UPLOAD_FILE,
  98.                                             on_click=lambda _: pick_files_dialog.pick_files(
  99.                                                 allow_multiple=True),
  100.                                             color="black",
  101.                                             bgcolor="white",
  102.                                             height=50,
  103.                                             style=ft.ButtonStyle(
  104.                                                 shape=ft.RoundedRectangleBorder(
  105.                                                     radius=5)))
  106.  
  107.     entriesCol = ft.Column(spacing=30,
  108.                            controls=[textField_name,
  109.                                      textField_password1,
  110.                                      select_merge_button],
  111.                            horizontal_alignment="center")
  112.  
  113.     page.add(entriesCol)
  114.  
  115.  
  116. if __name__ == "__main__":
  117.  
  118.     # app as a desktop app
  119.     ft.app(target=main)
  120.  
  121.     # app as a web app
  122.     # ft.app(target=main, view=ft.WEB_BROWSER)
  123.  
Tags: pdf
Advertisement
Add Comment
Please, Sign In to add comment