pdf转TXT文本,适用于文字型PDF;扫描版PDF需要使用OCR(光学字符识别)技术来识别图中的文字

我用夸克网盘给你分享了「pdf转TXT文本」,点击链接或复制整段内容,打开「夸克APP」即可获

链接:https://pan.quark.cn/s/3440cb35f485

python 复制代码
import os
import tkinter as tk
from tkinter import filedialog
from pypdf import PdfReader


def select_pdf_file():
    """弹出窗口选择单个PDF文件"""
    root = tk.Tk()
    root.withdraw()  # 隐藏主窗口

    file_path = filedialog.askopenfilename(
        title="请选择要转换的PDF文件",
        filetypes=[("PDF文件", "*.pdf"), ("所有文件", "*.*")]
    )
    return file_path if file_path else None


def select_output_path(default_name="output.txt"):
    """弹出窗口选择保存路径"""
    root = tk.Tk()
    root.withdraw()  # 隐藏主窗口

    output_path = filedialog.asksaveasfilename(
        title="保存文本文件",
        defaultextension=".txt",
        initialfile=default_name,
        filetypes=[("文本文件", "*.txt"), ("所有文件", "*.*")]
    )
    return output_path if output_path else None


def extract_text_standalone():
    """主流程:选择文件 -> 提取 -> 保存"""
    # 1. 选择文件
    pdf_path = select_pdf_file()
    if not pdf_path:
        print("未选择文件,程序退出。")
        return

    try:
        reader = PdfReader(pdf_path)
        text = ""

        print(f"\n正在提取:{os.path.basename(pdf_path)}")
        print(f"总页数:{len(reader.pages)},请稍候...")

        # 2. 逐页提取文本
        for page_num, page in enumerate(reader.pages, 1):
            page_text = page.extract_text()
            if page_text:
                # 添加分页标记,方便查看
                text += f"\n--- 第 {page_num} 页 ---\n"
                text += page_text

        # 3. 选择保存位置
        default_filename = os.path.splitext(os.path.basename(pdf_path))[0] + "_提取文本.txt"
        output_path = select_output_path(default_name=default_filename)

        if output_path:
            # 4. 写入文件 (使用utf-8防止中文乱码)
            with open(output_path, "w", encoding="utf-8") as f:
                f.write(text)
            print(f"成功!文本已保存至:\n   {output_path}")
        else:
            print("取消了保存操作。")

    except Exception as e:
        print(f"发生错误:{str(e)}")


# --- 程序入口 ---
if __name__ == "__main__":
#    extract_text_standalone()

附录

🛠️ 第一步:安装打包工具

在打包之前,你需要先安装 pyinstaller 库。

打开命令行(CMD)或终端,输入以下命令并回车:

复制代码
pip install pyinstaller

🚀 第二步:执行打包命令

假设你的 Python 脚本文件名为 pdf_converter.py

推荐命令(单文件模式)

这个命令会生成一个单独的 .exe 文件,方便你复制给别人使用。

复制代码
pyinstaller --onefile pdf_converter.py
进阶命令(自定义名称 + 隐藏控制台)

如果你希望生成的文件叫 PDF转文本工具.exe,并且不显示黑色的命令行窗口(因为你用了 GUI 弹窗):

复制代码
pyinstaller --onefile --name=PDF转文本工具 --windowed pdf_converter.py

⚠️ 注意:

如果你使用了 --windowed (或 -w) 参数,程序运行时不会显示黑色的控制台窗口

  • 优点:界面更清爽,像个正规软件。
  • 缺点 :你的代码中 print("✅ 成功...") 的提示信息你看不到。如果程序出错,你也看不到报错信息,程序会直接闪退。
  • 建议 :开发测试阶段先不要--windowed,等确认程序完美运行后,再打包发布版时加上它。

📂 第三步:找到生成的文件

打包完成后,命令行会显示 SUCCESS。此时你的文件夹里会多出几个目录:

  • dist 目录 (重点):这里面就是生成的 .exe 文件。你把这个文件复制出来,发给任何一台电脑都能直接双击运行。
  • build 目录:这是打包过程中的临时文件,打包完成后可以删除。
  • pdf_converter.spec 文件:这是 PyInstaller 的配置文件,一般不需要动。

💡 常见问题与技巧

  1. 杀毒软件误报

    打包出来的 .exe 文件有时会被 Windows Defender 或其他杀毒软件误报为病毒。这是因为 PyInstaller 的引导加载程序特征被某些杀毒软件标记了。如果是自己写的代码,选择"允许"或添加信任即可。

  2. 文件体积较大

    即使你的代码只有几行,生成的 .exe 文件也可能有 30MB-50MB 左右。这是正常的,因为它把 Python 解释器和 pypdf 库都打包进去了,相当于带了一个迷你 Python 环境。

  3. 如果代码里有图标

    如果你想给 exe 换个图标(需要 .ico 格式),可以加上 --icon 参数:

    复制代码
    pyinstaller --onefile --icon=my_icon.ico pdf_converter.py
相关推荐
凌风的跨境分享5 小时前
Temu店群运维提效:定时策略自动化任务全场景实操指南
大数据·运维·前端·人工智能·架构·自动化
ly76896 小时前
生产环境 Spring Boot 应用内存泄漏排查实战
java·spring boot·spring·内存泄漏·threadlocal·gc日志·堆转储
Zenova EdgeOS6 小时前
Linux iotop:工业边缘 I/O 高级分析实战
linux·运维·服务器
IT小白杨6 小时前
eBay多账号如何应对关联判定:主体、收款、IP、环境四层配置清单一次讲清
java·网络·网络协议·tcp/ip·自动化·指纹浏览器
linux_cfan6 小时前
videojs v10 源代码系列解读:06 · DOM 工具箱:事件、聚焦、Shadow DOM、定位
前端
尾善爱看海6 小时前
Vue 面试进阶篇:Composition API、插槽、自定义指令……8 个章节 + 高频面试题全解析
前端·javascript·vue.js·面试·vue
SEO_juper6 小时前
外贸多语言站最隐蔽的流量杀手:hreflang 错了,谷歌把德语页推给美国人(附审计脚本)
开发语言·前端·python·seo·独立站·谷歌优化
新时代牛马6 小时前
Linux 日志管理:journald、rsyslog 与 logrotate
linux·运维·服务器
亿元程序员6 小时前
为什么现在 AI 这么发达了,还要坚持手搓教程?
前端
無a伟7 小时前
RabbitMq高级特性:TTL,死信队列,延迟队列
java·分布式·rabbitmq