Python 基于easygui图形界面的pdf和word转换小程序

核心代码

# TODO 编写pdf转换器  制作exe程序
import easygui
import os
from docx2pdf import convert
from pdf2docx import Converter
from pdf2image import convert_from_path
import io
import sys


buffer = io.StringIO()
sys.stdout = buffer
sys.stderr = buffer

desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")


# TODO word转换成pdf实测可用
def word_to_pdf():
    word_file = easygui.fileopenbox(title="请上传要转换为pdf格式的word文件", default="*.docx")
    if word_file:
        pdf_file = word_file.replace(".docx", ".pdf")
        convert(word_file, pdf_file)
        easygui.msgbox(f"Word 文档已成功转换为 PDF:{pdf_file}", title="转换成功")
    else:
        easygui.msgbox("取消操作", title="操作取消")


def pdf_to_word():
    pdf_file = easygui.fileopenbox(title="请上传要转换为word格式的pdf文件", default="*.pdf")
    # 如果上传了文件,开始执行转换操作
    if pdf_file:
        docx_name = os.path.splitext(os.path.basename(pdf_file))[0] + ".docx"
        docx_path = os.path.join(desktop_path, docx_name)
        cv = Converter(pdf_file)
        cv.convert(docx_path)
        cv.close()
        easygui.msgbox(f"PDF 文档已成功转换为 Word:{docx_path}", title="转换成功")
    # 如果没上传,被视为取消操作
    else:
        easygui.msgbox("取消操作", title="操作取消")


choices = ["Word 转换 PDF", "PDF 转换 Word"]
choice = easygui.buttonbox("请选择要执行的操作", "文件转换小工具", choices=choices)

if choice == "Word 转换 PDF":
    word_to_pdf()
elif choice == "PDF 转换 Word":
    pdf_to_word()
else:
    easygui.msgbox("未选择任何操作", title="操作取消")

效果

制作成exe程序

  • 安装pyinstaller
pip3 install -i https://pypi.douban.com/simple/  pyinstaller
  • 进入脚本所在目录,cmd执行

# --noconsole指的是执行程序后不显示cmd的会话,即执行程序后不会弹出cmd的会话弹窗

pyinstaller --noconsole -F <pyname>

只要没明显报错,基本就可以用

  • 会在当前目录下生成build和dist目录

  • 双击即可使用

FAQ

Traceback (most recent call last): File "转换器.py", line 173, in <module> File "转换器.py", line 148, in word_to_pdf File "docx2pdf\__init__.py", line 106, in convert File "docx2pdf\__init__.py", line 29, in windows File "tqdm\asyncio.py", line 24, in __init__ File "tqdm\std.py", line 1099, in __init__ File "tqdm\std.py", line 1348, in refresh File "tqdm\std.py", line 1496, in display File "tqdm\std.py", line 462, in print_status File "tqdm\std.py", line 455, in fp_write File "tqdm\utils.py", line 139, in __getattr__ AttributeError: 'NoneType' object has no attribute 'write'

此报错是因为tqdm库(显示进度条的)这个库可能不兼容有什么其他问题,解决方法:

添加以下代码:

buffer = io.StringIO()
sys.stdout = buffer
sys.stderr = buffer

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值