最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python開發(fā)一個(gè)PDF文件元數(shù)據(jù)查看器

 更新時(shí)間:2026年01月07日 09:25:14   作者:bosins  
這篇文章主要介紹了如何基于Python開發(fā)PDF文件元數(shù)據(jù)查看器,包括作者信息、創(chuàng)建或修改日期、所用產(chǎn)品信息等,文中有完整的代碼示例供大家參考,需要的朋友可以參考下

下面是一個(gè)完整的Python GUI程序,用于查看PDF文件的元數(shù)據(jù)(包括作者信息),使用Tkinter作為GUI框架。這個(gè)程序可以提取PDF的作者、標(biāo)題、創(chuàng)建日期等信息。

完整代碼

有需要運(yùn)行版軟件的留言郵箱):

import os
import PyPDF2
import tkinter as tk
from tkinter import filedialog, messagebox, ttk
from tkinter.scrolledtext import ScrolledText

class PDFMetadataViewer:
    def __init__(self, root):
        self.root = root
        self.root.title("PDF元數(shù)據(jù)查看器")
        self.root.geometry("700x500")
        self.root.configure(bg="#f5f5f5")
        
        # 創(chuàng)建主框架
        main_frame = ttk.Frame(root, padding="20")
        main_frame.pack(fill=tk.BOTH, expand=True)
        
        # 標(biāo)題
        title_label = ttk.Label(main_frame, text="PDF元數(shù)據(jù)查看器", font=("Arial", 16, "bold"))
        title_label.pack(pady=(0, 15))
        
        # 說明文字
        info_label = ttk.Label(main_frame, 
                              text="選擇PDF文件以查看其元數(shù)據(jù)信息(作者、標(biāo)題、創(chuàng)建日期等)",
                              foreground="gray",
                              font=("Arial", 10))
        info_label.pack(anchor="w")
        
        # 選擇文件按鈕
        self.btn_browse = ttk.Button(main_frame, text="選擇PDF文件", command=self.browse_file, width=20)
        self.btn_browse.pack(pady=10)
        
        # 顯示區(qū)域
        self.text_area = ScrolledText(main_frame, wrap=tk.WORD, font=("Arial", 10), state=tk.DISABLED)
        self.text_area.pack(fill=tk.BOTH, expand=True, pady=5)
        
        # 操作按鈕
        btn_frame = ttk.Frame(main_frame)
        btn_frame.pack(pady=5)
        
        self.btn_save = ttk.Button(btn_frame, text="保存為文本文件", command=self.save_to_file, width=20)
        self.btn_save.pack(side=tk.LEFT, padx=5)
        
        self.btn_clear = ttk.Button(btn_frame, text="清除顯示", command=self.clear_display, width=20)
        self.btn_clear.pack(side=tk.LEFT, padx=5)
        
        # 狀態(tài)欄
        self.status_var = tk.StringVar()
        self.status_var.set("就緒 - 請選擇PDF文件")
        self.status_bar = ttk.Label(root, textvariable=self.status_var, relief=tk.SUNKEN, anchor=tk.W)
        self.status_bar.pack(side=tk.BOTTOM, fill=tk.X)
        
        # 信息提示
        info_note = ttk.Label(main_frame, 
                             text="注意:PDF文件中不包含計(jì)算機(jī)MAC地址信息,這些信息僅來自PDF的元數(shù)據(jù)",
                             foreground="red",
                             font=("Arial", 9))
        info_note.pack(pady=(10, 0), anchor="w")
    
    def browse_file(self):
        """打開文件選擇對話框"""
        file_path = filedialog.askopenfilename(
            title="選擇PDF文件",
            filetypes=[("PDF文件", "*.pdf"), ("所有文件", "*.*")]
        )
        if file_path:
            self.display_metadata(file_path)
    
    def display_metadata(self, file_path):
        """顯示PDF元數(shù)據(jù)"""
        try:
            self.text_area.config(state=tk.NORMAL)
            self.text_area.delete(1.0, tk.END)
            
            # 提取元數(shù)據(jù)
            metadata = self.get_pdf_metadata(file_path)
            
            if '錯(cuò)誤' in metadata:
                self.text_area.insert(tk.END, f"錯(cuò)誤: {metadata['錯(cuò)誤']}")
            else:
                # 顯示元數(shù)據(jù)
                self.text_area.insert(tk.END, f"PDF文件: {os.path.basename(file_path)}\n")
                self.text_area.insert(tk.END, f"文件路徑: {file_path}\n")
                self.text_area.insert(tk.END, f"{'-'*50}\n")
                self.text_area.insert(tk.END, "元數(shù)據(jù)信息:\n")
                self.text_area.insert(tk.END, f"作者: {metadata.get('作者', '未指定')}\n")
                self.text_area.insert(tk.END, f"標(biāo)題: {metadata.get('標(biāo)題', '未指定')}\n")
                self.text_area.insert(tk.END, f"創(chuàng)建日期: {metadata.get('創(chuàng)建日期', '未指定')}\n")
                self.text_area.insert(tk.END, f"修改日期: {metadata.get('修改日期', '未指定')}\n")
                self.text_area.insert(tk.END, f"主題: {metadata.get('主題', '未指定')}\n")
                self.text_area.insert(tk.END, f"關(guān)鍵詞: {metadata.get('關(guān)鍵詞', '未指定')}\n")
                self.text_area.insert(tk.END, f"產(chǎn)品: {metadata.get('產(chǎn)品', '未指定')}\n")
            
            self.text_area.config(state=tk.DISABLED)
            self.status_var.set(f"已加載: {os.path.basename(file_path)}")
        except Exception as e:
            self.text_area.config(state=tk.NORMAL)
            self.text_area.delete(1.0, tk.END)
            self.text_area.insert(tk.END, f"錯(cuò)誤: {str(e)}")
            self.text_area.config(state=tk.DISABLED)
            self.status_var.set("錯(cuò)誤: 無法加載文件")
    
    def get_pdf_metadata(self, file_path):
        """獲取PDF元數(shù)據(jù)"""
        try:
            with open(file_path, 'rb') as file:
                pdf_reader = PyPDF2.PdfReader(file)
                
                if pdf_reader.metadata:
                    return {
                        '作者': pdf_reader.metadata.get('/Author', '未指定'),
                        '標(biāo)題': pdf_reader.metadata.get('/Title', '未指定'),
                        '創(chuàng)建日期': pdf_reader.metadata.get('/CreationDate', '未指定'),
                        '修改日期': pdf_reader.metadata.get('/ModDate', '未指定'),
                        '主題': pdf_reader.metadata.get('/Subject', '未指定'),
                        '關(guān)鍵詞': pdf_reader.metadata.get('/Keywords', '未指定'),
                        '產(chǎn)品': pdf_reader.metadata.get('/Producer', '未指定')
                    }
                else:
                    return {'錯(cuò)誤': 'PDF文件不包含元數(shù)據(jù)'}
        except Exception as e:
            return {'錯(cuò)誤': str(e)}
    
    def save_to_file(self):
        """保存元數(shù)據(jù)到文本文件"""
        if self.text_area.cget("state") == tk.DISABLED:
            # 獲取當(dāng)前顯示的文本
            text = self.text_area.get(1.0, tk.END)
            # 移除末尾的換行符
            text = text.strip()
            if not text or "錯(cuò)誤" in text or "未指定" in text:
                messagebox.showinfo("提示", "沒有可保存的元數(shù)據(jù)")
                return
            
            # 選擇保存位置
            save_path = filedialog.asksaveasfilename(
                defaultextension=".txt",
                filetypes=[("文本文件", "*.txt"), ("所有文件", "*.*")],
                initialfile="pdf_metadata.txt"
            )
            
            if save_path:
                try:
                    with open(save_path, 'w', encoding='utf-8') as f:
                        f.write(text)
                    messagebox.showinfo("成功", f"元數(shù)據(jù)已保存到: {save_path}")
                    self.status_var.set(f"已保存到: {os.path.basename(save_path)}")
                except Exception as e:
                    messagebox.showerror("錯(cuò)誤", f"無法保存文件: {str(e)}")
        else:
            messagebox.showinfo("提示", "請先加載一個(gè)PDF文件")
    
    def clear_display(self):
        """清除顯示區(qū)域"""
        self.text_area.config(state=tk.NORMAL)
        self.text_area.delete(1.0, tk.END)
        self.text_area.config(state=tk.DISABLED)
        self.status_var.set("已清除顯示內(nèi)容")

if __name__ == "__main__":
    try:
        # 檢查是否安裝了PyPDF2
        import PyPDF2
    except ImportError:
        # 如果沒有安裝PyPDF2,提示用戶安裝
        messagebox.showerror("缺少庫", "需要安裝PyPDF2庫。請運(yùn)行: pip install PyPDF2")
        exit(1)
    
    root = tk.Tk()
    app = PDFMetadataViewer(root)
    root.mainloop()

使用說明

1.安裝依賴:

pip install PyPDF2

2.運(yùn)行程序:

  • 點(diǎn)擊"選擇PDF文件"按鈕
  • 從文件瀏覽器中選擇一個(gè)PDF文件
  • 程序?qū)@示PDF的元數(shù)據(jù)信息

功能說明

  • 元數(shù)據(jù)提?。簭腜DF中提取作者、標(biāo)題、創(chuàng)建日期、修改日期等信息
  • 用戶友好界面:使用Tkinter創(chuàng)建的GUI,簡單直觀
  • 錯(cuò)誤處理:處理常見錯(cuò)誤(如文件不存在、PDF格式錯(cuò)誤等)

界面展示

到此這篇關(guān)于基于Python開發(fā)一個(gè)PDF文件元數(shù)據(jù)查看器的文章就介紹到這了,更多相關(guān)Python PDF文件元數(shù)據(jù)查看內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python?Web后端開發(fā)中的增查改刪處理

    Python?Web后端開發(fā)中的增查改刪處理

    這篇文章主要介紹了Python?Web后端開發(fā)中的增查改刪處理,文章圍繞主題?展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • python去除空格和換行符的實(shí)現(xiàn)方法(推薦)

    python去除空格和換行符的實(shí)現(xiàn)方法(推薦)

    下面小編就為大家?guī)硪黄猵ython去除空格和換行符的實(shí)現(xiàn)方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • Python如何限制輸入的數(shù)范圍

    Python如何限制輸入的數(shù)范圍

    在Python中,我們可以使用多種方法來限制用戶輸入的數(shù)值范圍,今天通過實(shí)例代碼給大家分享Python限制輸入的數(shù)范圍,感興趣的朋友一起看看吧
    2024-05-05
  • Python和JS反爬之解決反爬參數(shù)?signKey

    Python和JS反爬之解決反爬參數(shù)?signKey

    這篇文章主要介紹了Python和JS反爬之解決反爬參數(shù)?signKey,Python?反爬中有一大類,叫做字體反爬,核心的理論就是通過字體文件或者?CSS?偏移,接下來文章的詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-05-05
  • python繪圖如何自定義x軸

    python繪圖如何自定義x軸

    這篇文章主要介紹了python繪圖如何自定義x軸問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python中的random()方法的使用介紹

    Python中的random()方法的使用介紹

    這篇文章主要介紹了Python中的random()方法的使用,是Python入門的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • 解決python刪除文件的權(quán)限錯(cuò)誤問題

    解決python刪除文件的權(quán)限錯(cuò)誤問題

    下面小編就為大家分享一篇解決python刪除文件的權(quán)限錯(cuò)誤問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 11個(gè)案例講透Python函數(shù)參數(shù)小結(jié)

    11個(gè)案例講透Python函數(shù)參數(shù)小結(jié)

    本文主要介紹了11個(gè)案例講透Python函數(shù)參數(shù)小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • python之從文件讀取數(shù)據(jù)到list的實(shí)例講解

    python之從文件讀取數(shù)據(jù)到list的實(shí)例講解

    下面小編就為大家分享一篇python之從文件讀取數(shù)據(jù)到list的實(shí)例講解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 淺談Python對內(nèi)存的使用(深淺拷貝)

    淺談Python對內(nèi)存的使用(深淺拷貝)

    這篇文章主要介紹了淺談Python對內(nèi)存的使用(深淺拷貝),具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01

最新評論

冕宁县| 客服| 黄浦区| 吉木乃县| 建水县| 运城市| 讷河市| 石台县| 广水市| 綦江县| 大余县| 讷河市| 雷山县| 安远县| 财经| 界首市| 靖远县| 大厂| 云龙县| 红安县| 石棉县| 鄂托克前旗| 万山特区| 泰来县| 阜新市| 武城县| 柘荣县| 肥东县| 汝州市| 宜丰县| 来凤县| 隆昌县| 通江县| 常宁市| 辉县市| 江阴市| 洪泽县| 海伦市| 六枝特区| 滕州市| 花莲县|