Un programme de fusion et de fractionnement de PDF utilisant la bibliothèque PyMuPDF

L'application PDF Tools est un outil simple écrit à l'aide de wxPython et de la bibliothèque PyMuPDF pour fusionner et diviser des fichiers PDF. Il fournit une interface graphique conviviale qui permet aux utilisateurs de sélectionner les dossiers source et de destination et d'effectuer des opérations sur les fichiers PDF.
C:\pythoncode\blog\pdfmergandsplit.py
insérez la description de l'image ici

Caractéristiques

  • Sélectionner un dossier : les utilisateurs peuvent facilement sélectionner les dossiers source et de destination via l'interface de l'application.
  • Fusionner des fichiers PDF : L'application permet aux utilisateurs de sélectionner des fichiers PDF pour les fusionner et de les fusionner en un seul fichier PDF.
  • Fractionner les fichiers PDF : les utilisateurs peuvent sélectionner un fichier PDF pour le diviser en plusieurs fichiers PDF distincts, chacun contenant une page.

mise en œuvre du programme

L'application utilise les bibliothèques et modules suivants :

  • wxPython : Interface utilisateur graphique pour créer des applications.
  • PyMuPDF : Une bibliothèque pour manipuler des fichiers PDF.

La partie principale de l'application est la wx.Framefenêtre principale, une classe héritée de wxPython. Une fenêtre contient les composants suivants :

  • Sélectionnez les boutons des dossiers source et destination.
  • Zone de liste de fichiers PDF, affichant les fichiers PDF dans le dossier source.
  • Boutons Fusionner et Diviser pour effectuer les actions correspondantes.

Lorsque l'utilisateur appuie sur le bouton Sélectionner le dossier source, l'application affiche une boîte de dialogue de sélection de dossier dans laquelle l'utilisateur peut sélectionner le dossier source. Après sélection, l'application obtient le chemin du dossier et répertorie les fichiers PDF dans le dossier. Les boutons Fusionner et Diviser deviennent alors disponibles et l'utilisateur peut effectuer l'action appropriée.

L'événement de clic du bouton de fusion fera apparaître une boîte de dialogue de saisie de texte, demandant à l'utilisateur de saisir le nom du fichier fusionné. Après la saisie de l'utilisateur, l'application appelle la bibliothèque PyMuPDF pour fusionner les fichiers PDF sélectionnés et enregistre les fichiers PDF fusionnés dans le dossier cible.

L'événement de clic du bouton partagé parcourt les fichiers PDF sélectionnés et enregistre chaque page en tant que fichier PDF distinct à l'aide de la bibliothèque PyMuPDF.

exemple de code

Voici un exemple de code pour l'application :

import os
import wx
import fitz

class PDFToolApp(wx.Frame):
    def __init__(self, parent, title):
        super(PDFToolApp, self).__init__(parent, title=title, size=(400, 400))

        self.panel = wx.Panel(self)
        self.source_folder_btn = wx.Button(self.panel, -1, "选择源文件夹")
        self.target_folder_btn = wx.Button(self.panel, -1, "选择目标文件夹")
        self.pdf_list = wx.CheckListBox(self.panel, -1, choices=[], style=wx.LB_MULTIPLE)
        self.merge_btn = wx.Button(self.panel, -1, "合并")
        self.split_btn = wx.Button(self.panel, -1, "分拆")
        self.merge_btn.Disable()
        self.split_btn.Disable()

        self.source_folder_btn.Bind(wx.EVT_BUTTON, self.on_select_source_folder)
        self.target_folder_btn.Bind(wx.EVT_BUTTON, self.on_select_target_folder)
        self.merge_btn.Bind(wx.EVT_BUTTON, self.on_merge)
        self.split_btn.Bind(wx.EVT_BUTTON, self.on_split)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.source_folder_btn, 0, wx.ALIGN_CENTER | wx.ALL, 10)
        sizer.Add(self.target_folder_btn, 0, wx.ALIGN_CENTER | wx.ALL, 10)
        sizer.Add(self.pdf_list, 1, wx.EXPAND | wx.ALL, 10)
        sizer.Add(self.merge_btn, 0, wx.ALIGN_CENTER | wx.ALL, 10)
        sizer.Add(self.split_btn, 0, wx.ALIGN_CENTER | wx.ALL, 10)
        self.panel.SetSizer(sizer)

        self.Show()

    def on_select_source_folder(self, event):
        dlg = wx.DirDialog(self, "选择源文件夹", style=wx.DD_DEFAULT_STYLE)
        if dlg.ShowModal() == wx.ID_OK:
            source_folder_path = dlg.GetPath()
            self.pdf_list.Set(self.get_pdf_files(source_folder_path))
            self.merge_btn.Enable()
            self.split_btn.Enable()
        dlg.Destroy()

    def on_select_target_folder(self, event):
        dlg = wx.DirDialog(self, "选择目标文件夹", style=wx.DD_DEFAULT_STYLE)
        if dlg.ShowModal() == wx.ID_OK:
            self.target_folder_path = dlg.GetPath()
        dlg.Destroy()

    def on_merge(self, event):
        selected_items = self.pdf_list.GetCheckedItems()
        if len(selected_items) > 0:
            dlg = wx.TextEntryDialog(self, "请输入合并后的文件名(不带扩展名):", "合并文件")
            if dlg.ShowModal() == wx.ID_OK:
                output_filename = dlg.GetValue()
                output_filepath = os.path.join(self.target_folder_path, output_filename + ".pdf")
                self.merge_pdfs(selected_items, output_filepath)
                wx.MessageBox("PDF文件合并完成!", "完成", wx.OK | wx.ICON_INFORMATION)
            dlg.Destroy()

    def on_split(self, event):
        selected_items = self.pdf_list.GetCheckedItems()
        if len(selected_items) > 0:
            for index in selected_items:
                pdf_filename = self.pdf_list.GetString(index)
                pdf_filepath = os.path.join(self.target_folder_path, pdf_filename)
                self.split_pdf(pdf_filename, pdf_filepath)
            wx.MessageBox("PDF文件分拆完成!", "完成", wx.OK | wx.ICON_INFORMATION)

    def merge_pdfs(self, selected_items, output_filepath):
        pdf_merger = fitz.open()

        for index in selected_items:
            pdf_filename = self.pdf_list.GetString(index)
            pdf_filepath = os.path.join(self.target_folder_path, pdf_filename)
            pdf = fitz.open(pdf_filepath)
            pdf_merger.insert_pdf(pdf)

        pdf_merger.save(output_filepath)
        pdf_merger.close()

    def split_pdf(self, pdf_filename, pdf_filepath):
        pdf = fitz.open(pdf_filepath)
        num_pages = pdf.page_count

        for i in range(num_pages):
            output_filename = f"{
      
      pdf_filename[:-4]}_{
      
      i+1}.pdf"
            output_filepath = os.path.join(self.target_folder_path, os.path.basename(output_filename) )
            print("output_filename:"+output_filename)
            page = pdf[i]
            new_pdf = fitz.open()
            new_pdf.insert_pdf(pdf, from_page=i, to_page=i)
            new_pdf.save(output_filepath)
            print("self.target_folder_path:"+self.target_folder_path)
            print("output_filepath:"+output_filepath)
            new_pdf.close()

        pdf.close()

    def get_pdf_files(self, folder_path):
        pdf_files = []
        for filename in os.listdir(folder_path):
            if filename.endswith(".pdf"):
                pdf_files.append(folder_path+'/'+filename)
        return pdf_files

if __name__ == "__main__":
    app = wx.App()
    PDFToolApp(None, "PDF工具")
    app.MainLoop()

Résumer

L'application PDF Tools est un utilitaire simple écrit à l'aide de wxPython et de la bibliothèque PyMuPDF pour fusionner et diviser des fichiers PDF. Il fournit une interface graphique intuitive qui permet aux utilisateurs de sélectionner facilement des dossiers et d'effectuer des opérations. Qu'il s'agisse de traiter un grand nombre de fichiers PDF ou d'une simple opération de fractionnement, l'application peut répondre aux besoins des utilisateurs.

Je suppose que tu aimes

Origine blog.csdn.net/winniezhang/article/details/132333475
conseillé
Classement