分类: python

  • 开源Office Word格式转换工具

    开源Office Word格式转换工具

    Open Source Office Word Document Format Converter

    批量将 Word 旧版 .doc 文件转换为新版 .docx 格式 — 基于 Tkinter 与 Word COM 的 Windows 桌面小工具。

    License: MulanPSL-2.0 Python 3.14+ Platform: Windows Version


    📖 项目简介 / Overview

    开源Office Word格式转换工具 是由 技术奇客 ITGeeker.net 出品的 Office 系列小工具,专门解决企业、政务与教育场景下的 Word 旧格式兼容问题 —— 当你面对成百上千份历史遗留的 .doc 文件时,逐个用 Word 打开再"另存为"效率极低,本工具一键批量转换。

    Batch-convert legacy Word .doc files to modern .docx format — a Tkinter + Word COM based Windows desktop utility.

    🎯 解决什么痛点

    • 🏢 企业迁移:旧系统留下的 .doc 文档需要快速升级到 .docx
    • 📦 批量处理:一次扫描整个目录(含子目录),挑选后一键转换
    • 💾 失败可查:损坏的 .doc 不中断任务,失败列表单独导出
    • 🎨 现代化 UI:森林主题(明/暗)+ 系统托盘,操作不打扰当前工作

    ✨ 核心特性 / Features

    • 🖱️ 一键批量转换 — 选定目录后列出所有 .doc(可含子目录),多选后后台线程并发处理,UI 不卡顿
    • 🛡️ 失败容忍 — 单个文件损坏不会中断整个任务;失败列表写入 %USERPROFILE%\itgeeker_widget_config\config_doctodocx_failed.json
    • 🎨 Forest 主题 — 采用 rdbende/Forest-ttk-theme,支持一键切换明/暗
    • 🖥️ 系统托盘 — 关闭窗口最小化到托盘,右键菜单含彩色 Emoji 图标(🏠 显示 / 🙈 隐藏 / ℹ️ 关于 / 🚪 退出)
    • 💾 状态持久化 — 自动记忆窗口位置/大小、上次目录、暗黑偏好、选中文件列表
    • 📦 零依赖 EXE — PyInstaller 单文件打包,含完整 Windows 版本信息(公司/版权/网址),无需 Python 环境即可运行
    • 🩺 统一版本元数据__version__ 单一来源,GUI 关于标签 / PyInstaller 版本信息 / pyproject.toml 自动同步
    • 🪟 关于对话框 — 单实例、含可点击超链接 https://www.itgeeker.net

    📸 效果演示 / Demo

    暗黑主题

    暗黑主题

    明亮主题

    明亮主题

    系统托盘(含彩色 Emoji 图标)
    (截图占位 — 运行 dist/ITGeekerConvertDocToDocx_v2.0.0.1.exe 后右键托盘查看)


    🚀 快速上手 / Getting Started

    1️⃣ 环境准备 / Prerequisites

    项目要求
    操作系统Windows 10 / 11
    Microsoft Office2003 或更高版本(需 Word,工具通过 COM 调用)
    Python(仅源码运行)3.14+
    包管理工具(推荐)uv

    2️⃣ 安装 / Installation

    方式 A:直接下载 EXE(推荐普通用户)

    Releases 页面下载最新的 ITGeekerConvertDocToDocx_v{version}.exe,双击运行即可。

    方式 B:从源码运行(推荐开发者)

    # 克隆仓库
    git clone https://github.com/alanljj/itgeeker_convert_doc_to_docx.git
    cd itgeeker_convert_doc_to_docx
    
    # uv 会自动创建 .venv/ 并安装依赖(pywin32 等)
    uv sync
    
    # 启动 GUI(任意工作目录均可执行)
    uv run main.py

    启动成功后会在右下角系统托盘出现 🟠 图标,同时弹出主窗口。

    3️⃣ 使用示例 / Usage

    GUI 操作流程:

    1. 点击 「选择目录」 选择含 .doc 文件的目录
    2. 勾选 「包含子目录」(可选)刷新列表
    3. 在文件列表中 多选 需要转换的文件(Ctrl/Shift 多选)
    4. 点击 「开始转换」,后台线程开始处理
    5. 完成后弹窗显示成功 / 失败数量,失败文件列表已自动写入 JSON

    命令行启动方式(三选一):

    # 方式一:根目录入口脚本(推荐,最直观)
    uv run main.py
    
    # 方式二:通过 pyproject.toml [project.scripts] 注册的命令
    uv run convert-doc-to-docx
    
    # 方式三:以模块形式调用
    uv run python -m app

    ⚙️ 配置说明 / Configuration

    应用无需任何手动配置即可运行。所有用户偏好自动持久化到:

    文件内容
    %USERPROFILE%\itgeeker_widget_config\config_doctodocx.json窗口几何、上次目录、主题偏好、文件列表
    %USERPROFILE%\itgeeker_widget_config\config_doctodocx_failed.json上次失败的 .doc 文件列表(仅在有失败时生成)

    💡 itgeeker_widget_config 子目录供多个 ITGeeker 工具共享,便于集中备份。


    🛠️ 开发与发布 / Development & Release

    项目结构

    itgeeker_convert_doc_to_docx/
    ├── _meta.py / app.py / conversion.py / gui.py / main.py
    │   └── persistence.py / theme.py / tray.py
    ├── assets\                    # 打包资源
    │   ├── geekercloud_orange32.ico
    │   ├── geekercloud_orange32.png
    │   ├── converdoc_dark.png
    │   └── converdoc_light.png
    ├── resources\                 # Forest 运行时主题
    │   ├── forest-light.tcl + forest-light/*.png  (70)
    │   └── forest-dark.tcl  + forest-dark/*.png   (68)
    ├── scripts\build_exe.py       # PyInstaller 打包脚本
    ├── tests\                     # 54 个单元测试
    ├── pyproject.toml             # PEP 621 元数据 + hatch 构建
    ├── README.md
    └── LICENSE                     # MulanPSL-2.0

    标准流程

    # 1. 修改代码后,先用 Python 主文件测试
    uv run main.py
    
    # 2. 静态检查 + 单元测试
    uv run ruff check .
    uv run pytest
    
    # 3. 静态检查通过后,按需打包(不是每次都打包)
    uv sync --extra build
    uv run python scripts/build_exe.py
    # 输出:dist/ITGeekerConvertDocToDocx_v{version}.exe

    ⚠️ 打包是手动操作 — 不会自动触发。修改代码后请按上面 1-2 步测试,通过后才打包。

    依赖 / Tech Stack

    类型说明
    运行时pywin32调用 Word COM 转换 .doc.docx
    运行时infi-systrayWindows 系统托盘(原生 Win32,支持菜单项彩色 Emoji 图标)
    运行时Pillow彩色 Emoji 渲染 + PNG/ICO 处理
    运行时Tkinter (stdlib)GUI + 主题
    开发pytest54 个单元测试
    开发ruff静态检查(PEP 8 / pyupgrade / bugbear 等)
    打包pyinstaller单文件 EXE

    🤝 贡献指南 / Contributing

    欢迎贡献代码、报告 Bug 或改进文档!

    1. Fork 本仓库到你的账号
    2. 创建特性分支:git checkout -b feat/your-feature
    3. 提交代码:git commit -m "feat: add your feature"
    4. 推送到你的 Fork:git push origin feat/your-feature
    5. 在 GitHub / Gitee 上发起 Pull Request

    📌 开发纪律(来自项目记忆):

    不要随意删除项目目录里不是你创建的文件(详见 [[no-deletions]])

    修改前先 uv run pytest 跑通全部 54 个测试

    提交前 uv run ruff check . 无警告


    📜 开源协议 / License

    本项目采用 木兰宽松许可证 第2版 (MulanPSL-2.0) 开源。

    Copyright (c) 2023 技术奇客ITGeeker.net
    https://www.itgeeker.net

    详见 LICENSE 文件。


    📝 更新日志 / Changelog

    v2.0.0.1(2026-07-28)

    1. 🐛 修复:剥离 infi.systray 自动追加的 Quit 菜单项(其 callback 是字符串,点会抛 TypeError)
    2. 🐛 修复:托盘退出时不能 join 自己线程;改用 os._exit(0) 强制终止进程,确保「关于」窗口同时关闭
    3. 📦 EXE 文件名格式改为 ITGeekerConvertDocToDocx_v{version}.exe
    4. 🏠 修复:传 ICO 而非 PNG 给 infi.systray.SysTrayIcon(之前显示默认图标)
    5. 🪟 关于对话框改为单实例
    6. 🐛 修复:Path.decodedict.add 错误(infi.systray 菜单更新)

    v2.0.0.0(2026-07-28)

    1. ✨ 系统托盘:彩色 Emoji 图标 + 切换显示/隐藏 + 单实例关于对话框
    2. ✨ 窗口位置/大小持久化:退出时保存,下次启动自动恢复
    3. ✨ 关于对话框:可点击超链接 https://www.itgeeker.net
    4. ✨ Forest 主题:明/暗切换 + 高 DPI ICO(16/32/48 多尺寸)
    5. 🔧 重构为根级 Python 包:app / conversion / gui / persistence / theme / tray
    6. 🔧 转换改为后台线程 + after() 轮询,UI 不再冻结
    7. 🔧 JSON 写入改为 tempfile + os.replace 原子化,旧中文字段 100% 兼容
    8. 🔧 主题资源(forest-light/dark tcl + 138 PNG + 图标)移入包内,CWD 无关
    9. 🔧 消除 geekerWin / style 模块级全局变量
    10. 🔧 默认窗口宽度改为 975px,标题栏/托盘使用统一图标
    11. 📦 PyInstaller 打包脚本:单文件 EXE,附带完整 Windows 版本信息
    12. 📦 54 个单元测试(persistence / conversion / tray / metadata)
    13. 🔧 修复 push.py(Python 2 raw_input → Python 3 input,加 __main__ 守卫)

    v1.0.2.0(2023-06-13)

    1. ✨ 增加文件计数,并一同保存和预读
    2. 🔧 改写转换接口,当碰到错误文件时,记录错误,但并不中断继续转换
    3. ✨ 弹窗显示成功和失败的数量,及失败的文件列表,便于移除错误文件

    v1.0.1.0(2023-06-12)

    1. 🐛 修复 Icon 文件错误问题,改用 base64 格式
    2. 📦 由于 PyInstaller 打包问题,改为安装包发行

    v1.0.0.0(2023-06-11)

    1. 🎉 工具首发并已开源。

    🔗 相关链接 / Links


    Made with ❤️ by 技术奇客 ITGeeker

    Copyright © 2023-present · MulanPSL-2.0

  • qBittorrent如何运行脚本 BT实现自动改名并方便Jellyfin的搜刮器

    qBittorrent如何运行脚本 BT实现自动改名并方便Jellyfin的搜刮器

    很多影视网站下载的视频名字大概是为了规避监测,命名非常奇葩,比如:z灼f流,y骨y等等。如果你使用了Jellyfin,Emby又或者是其他视频管理软件,搜刮器就会搜不到相应的电视剧的介绍,图片和字幕了,但是40多集电视剧每一集都要改就有些麻烦了。

    还有一些电影,BT下载后会带有网站的一些网址或名称,比如:【高清影视之家发布 www.HDBTHD.com】,【高清影视之家首发 www.BBEDDE.com】等。还有目录里会放一些以MP4或者PNG结尾的假的宣传文件,这就会影响Jellyfin之类的搜刮相关的影视介绍和字幕。

    如果你使用的是qBittorrent的话,那么你就可以使用它的“运行外部程序”功能,可以再BT下载创建时或者完成时运行不同的脚本。依据所有开发语言都是脚本语言的概念,你可以运行Bash脚本,也可以运行Python,当然也可以运行JS或者其他任何语言的脚本。如果你使用的是Windows系统,安装一下Python语言,然后就可以让qBittorrent自动运行你的python脚本了。比如:

    • 自动重命名文件夹
    • 删除图片及网站的宣传文件
    • 重命名视频文件的名称
    • 删除完成的种子
    • 或者其他任何你想要的行动等等

    如何找到qBittorrent“运行外部程序”功能?

    可能有些人在qBittorrent的设置里并没有找到可以配置运行外部脚本的选项,其实这个选项并不在桌面应用的设置界面,而是在网页版界面的设置里。

    这是我设置了8181端口,这个可以在桌面应用-设置的“Web UI”选项里配置。

    by itgeeker.net

    这里有两个方式运行自定义脚本,qBittorrent称之为外部程序。一个是新增BT现在时,另一个是完成下载后运行。分别是:

    • 新增 torrent 时运行外部程序
    • torrent 完成时运行外部程序

    ITGeeker技术奇客这里 以BT下载完成后如何运行Python脚本为例与大家分享。

    qBittorrent脚本参数

    qBittorrent在配置的下方很贴心的附上了脚本运行可能需要的变量。这些是qBittorrent支持的参数(区分大小写):

    • %N:Torrent 名称
    • %L:分类
    • %G:标签(以逗号分隔)
    • %F:内容路径(与多文件 torrent 的根目录相同)
    • %R:根目录(第一个 torrent 的子目录路径)
    • %D:保存路径
    • %C:文件数
    • %Z:Torrent 大小(字节)
    • %T:当前 tracker
    • %I: 信息哈希值 v1
    • %J:信息哈希值 v2
    • %K: Torrent ID

    提示:使用引号将参数扩起以防止文本被空白符分割(例如:”%N”)

    qBittorrent的脚本运行命令如何配置?

    Windows运行Python脚本命令格式:
    D:\pyenv311_itgeeker_dev\Scripts\python.exe D:\download_dev\qbit_after.py "%F"
    Ubuntu运行Python脚本命令格式:
    /bin/python3 /opt/qbit_after.py "%F"
    #或者使用Bash脚本
    sh /opt/qbit_after.sh "%F"
    • 前面是Python命令的完整路径,ITGeeker技术奇客在Windows里用的python虚拟环境,也建议使用虚拟环境以免和其他python环境冲突。
    • 中间是脚本的完整路径,根据你脚本的实际位置填写。这里也可以是其他脚本,比如sh,js,perl等,但要和前面的运行命令统一。
    • 最后是qBittorrent支持的参数”%F”,值得是下载后的BT内容完整目录。这里是把该参数传递给qbit_after.py这个脚本使用。

    Ubuntu安装带有WebUI的qBittorrent
    sudo apt install -y qbittorrent-nox

    by itgeeker.net

    Python运行脚本

    接下来就是python命令的编写,这里分享ITGeeker技术奇客写的部分脚本:

    if len(sys.argv) > 1:
        first_argv = sys.argv[1]
        print('first_argv: %s' % first_argv)
        is_file = check_is_a_file(first_argv)
        if not is_file:
            remove_files_from_folder(first_argv)
        else:
            update_film_name(first_argv)

    提示:这里需要先判断一下(check_is_a_file)下载的是文件还是目录,有些BT下载后直接是文件,有些是目录。然后再进行相应操作。

    by itgeeker.net
  • 开源Word文字替换小工具更新 增加文档页眉和页脚替换功能

    开源Word文字替换小工具更新 增加文档页眉和页脚替换功能

    ITGeeker技术奇客发布的开源Word文字替换小工具更新到v1.0.1.0版本啦,现已支持Office Word文档页眉和页脚的替换。

    同时ITGeeker技术奇客修复了v1.0.0.0版本因替换数字引起的in ‘ requires string as left operand, not int错误。

    开源Word文字替换小工具官方介绍页面:https://www.itgeeker.net/itgeeker-technical-service/itgeeker_word_str_replacement/

    开源地址及下载:https://gitee.com/itgeeker/itgeeker_word_str_replacement/releases

    页眉和页脚的替换功能更新系由一位叫“李”的同学提的要求,也请广大同学多提意见,多交流。

  • 升级到IntelliJ IDEA Pycharm 2021.3 修改正确的pycharm64.exe.vmoptions还是没法启动的原因

    升级到IntelliJ IDEA Pycharm 2021.3 修改正确的pycharm64.exe.vmoptions还是没法启动的原因

    这种现象主要发生在之前通过修改pycharm64.exe.vmoptions破解过Pycharm,然后通过升级Pycharm,采用新的jar来破解,结果不管怎么修改的bin目录下的pycharm64.exe.vmoptions来加载jar就是无法成功破解,甚至无法启动Pycharm,就是点击运行Pycharm之后没启动无任何反应。这里以Pycharm 2021.3版本为例,其他的同系列IDE应该雷同。

    Pycharm pycharm64.exe.vmoptions启动调试大法

    运行CMD,到pycharm.bat的目录,通常是:

    cd C:\Program Files\JetBrains\PyCharm 2021.3\bin
    pycharm.bat

    此时在终端你会看到运行后的log,如果你看到类似“系统找不到指定的文件”的提示,说明配置文件有错。最后启动会失败,还会有类似:

     java.lang.instrument ASSERTION FAILED ***: "result" with message agent load/premain call failed at ./src/java.instrument/share/native/libinstrument/JPLISAgent.c line: 422
    fatal error in native method: processing of -javaagent failed, processjavastart failed

    这就说明 javaagent运行路径有问题,但是如果你非常明确文件路径是对的,不管是双斜杠和单斜杠都试过了,还是不行。

    -javaagent:C:\\pycharm_active\\Activation2099\\FineAgent.jar
    -javaagent:C:\pycharm_active\Activation2099\FineAgent.jar
    

    那你就要检查一下另一个pycharm64.exe.vmoptions的文件了,ITGeeker技术奇客发现有两个文件,他们分别是:

    C:\Program Files\JetBrains\PyCharm 2021.3\bin\pycharm64.exe.vmoptions

    这也是网上大部分破解教程提到的路径,其实还有另外一个路径:

    by itgeeker.net
    C:\Users\%USERNAME%\AppData\Roaming\JetBrains\PyCharm2021.3\pycharm64.exe.vmoptions
    

    查看一下这两个文件的 -javaagent 路径吧,删除错误的应该能帮你解决问题。

    ITGeeker技术奇客还发现如果两个文件都加载同样的 -javaagent 文件,使用pycharm.bat运行输出发现会被加载两遍。所以只要一个正确的 -javaagent 的路径就可以了。

    Pycharm破解开源原始地址

    国内的很多需要关注公众号的破解jar还是夹带了些私货的,在此附上Github大神开源的破解源:

    https://github.com/ja-netfilter/ja-netfilter
  • 国内PIP安装加速 临时和永久设置镜像的方法

    国内PIP安装加速 临时和永久设置镜像的方法

    永久加速PIP安装速度

    mkdir ~/.pip
    echo -e "\n[global]\ntimeout = 6000\nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple\n[install]\ntrusted-host = pypi.tuna.tsinghua.edu.cn\n#extra-index-url=https://www.piwheels.org/simple">~/.pip/pip.conf

    验证一下

    cat ~/.pip/pip.conf

    临时加速PIP安装速度

    pip install email_validator pdfkit pdfminer -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host tuna.tsinghua.edu.cn
  • Synology群辉NAS Python 3如何安装PIP

    Synology群辉NAS Python 3如何安装PIP

    Python 3通过API给NAS里的电源获取电影字幕碰到的第一个问题就是:你的群辉NAS没有安装PIP,无法安装Python模块。

    通过群辉应用商店安装的python 3,pip path:cd /volume1/@appstore/py3k/usr/local/lib/python3.8/site-packages

    确认没有,那么开始安装吧:

    curl -k https://bootstrap.pypa.io/get-pip.py | python3

    或者

    curl -O https://bootstrap.pypa.io/get-pip.py
    sudo python3 get-pip.py

    如果发现网络连不上pypa.io, 连接超时错误,如果有代理的话就:

    export http_proxy=http://192.168.1.X:1080
    export https_proxy=http://192.168.1.X:1080

    没有的话也不要急,用镜像地址也可以:

    python3 get-pip.py -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

    确认一下pip或者pip3的安装路径,如果是/var/packages/py3k/target/usr/local/bin,那么:

    export PATH=$PATH:/var/packages/py3k/target/usr/local/bin

    或者

    echo "PATH=\$PATH:/var/packages/py3k/target/usr/local/bin" >> ~/.bashrc
    source ~/.bashrc 

    然后就可以用pip安装需要的模块了

奇客罗方公众号 奇客罗方小程序 奇客罗方客服 ITGeeker Telegram

网站由ITGeeker技术奇客开发并管理;隶属于GeekerCloud奇客罗方智能科技
Site designed and developed by ITGeekerwhich is a sub-website of GeekerCloud
网站地图 | 沪ICP备2021031434号-4