“音符文档助手”软件操作手册

目录

1、软件介绍

2、界面展示

3、安装教程

4、操作手册

5、注意事项

6、作者鸣谢

7、代码示例

【介绍】

  1. 音符文档助手PC端是一款实现word转pdf、pdf转word、pdf合并、pdf拆分、图片转pdf、pdf转图片的pc软件;
  2. 本软件基于python开发,使用到fitz、win32api等库;
  1. 作者:TYF - a student from CQU
  2. 联系方式:3538182550@qq.com
  3. 项目已开源:gitee:https://gitee.com/TangGarlic/fileSystem

                           Github:https://github.com/TonyTang-dev/fileSystem

  1. 软件当前还存在很多bug,还需要测试解决,如果您发现了软件的bug或者体验感需要改进的地方请联系作者,发送邮件给作者说明;
  1. 注意:

    1. 本软件虽已开源,但作者不允许将源码用于违法犯罪活动;
    2. 禁止针对源码的恶意删改发布,若运用此源码进行违法犯罪活动,作者在此声明与作者本人无关
    3. 作者保证本软件不会获取用户的私人信息,不会恶意破坏用户终端;
    4. 如果出现软件卡死、闪退等问题,只能是软件本身的bug,作者开发调试不能考虑到所有的问题,此时用户可通过资源管理器直接杀掉软件进程即可(ctrl+alt+delete打开资源管理器,选择“音符文档助手”进程,点击“结束任务”即可)
    5. 软件最终解释权归作者所有

【界面】

【安装教程】

  1. 将父目录 “/音符文档助手”复制到您希望的目录下,如D:/,即可完成安装;
  2. 进入目录“/音符文档助手/”,找到文件“音符文档助手.exe”,双击即可运行软件;
  3. 为了方便您的使用,我建议您建立桌面快捷方式:
    1. 进入目录“/音符文档助手/”,找到文件“音符文档助手.exe”;
    2. 右键单击该文件,为该文件建立桌面快捷方式(右键单击->发送到->桌面快捷方式),此后双击桌面快捷方式即可启动软件;
  4. 父目录结构:

  1. 目标exe文件,双击可启动软件--建议建立桌面快捷方式

【操作手册】

操作总述:选择功能--->选择文件(可多选)-->点击开始输出--->在您选择的第一个文件目录下生成目标文件

  1. 选择文件:

2种方式:a.点击左上角File按钮;b.将文件拖动到下方文件区

  1. 点击File按钮,进入文件选择界面,若单选,点击文件->点击打开或者直接双击文件即可;若多选,按住ctrl键,依次选择文件即可;

  1. 拖动文件到文件区:文件区在面板下方,您可选择鼠标多选文件之后,直接拖放到文件区即可;

  1. 选择成功之后,面板路径区会显示您选中的文件路径;
  1. 选择功能:

    1. 界面上方是工具栏,即选择您需要的功能;
    2. 选择功能之后面板会显示您当前可进行的操作,如点击作者;
    3. 若未选择功能,面板会显示“待选择”,此时您无法进行文档操作;

  1. 更换背景:

    1. 用户可自定义中间面板的背景图片;
    2. 点击左下角的更换背景,选择后缀为.jpg/.png的图片,确定即可;
    3. 用户之后重启软件,图片依然存在;
    4. 注意:此时计算机中背景图片一旦更换了存储位置或删除或修改了文件名则背景图片失效,自动切换为默认图片,若需要,可在此修改

  1. 执行操作:本例以pdf合并为例

注意:如果你想让你的合并结果按照某种顺序,建议您这样做:复制需要合并的pdf文件到新文件夹,按照顺序重命名文件(如按1.pdf,2.pdf,3.pdf···);

这样在文件夹中计算机会按照顺序为我们排好序,直接拖入文件区即可,这样会按照顺序合并PDF。

  1. 选择功能-->“PDF合并”;

  1. 选择文件,合并当然选择多个文件,以拖动选择为例;

  1. 点击开始输出:可以看到我们选择的第一个文件路径是在桌面,因为我们默认目标文件保存的是第一个文件的路径,所以生成的文件保存到桌面,进度条显示进度;

  1. 其他操作与此类似,举一反三即可进行操作

写在最后:

注意事项:

  1. 注意我们主要是一个操作PDF文件的软件,因此选择文件时注意辨别,不要选择了非.pdf后缀的文件,如果选择了这些文件,可能会导致一些难以估计的后果,如软件卡死等情况;此时请通过计算机的资源管理器关掉我们的软件。
  2. 注意按照教程使用软件,如pdf拆分是,要求输入的格式是:“a-b”,例如“1-23”,当你输入不合法时,系统会提示您,但是我建议您按照要求输入,正确使用软件,因为作者能力有限,不能够考虑完全周到;

  1. 点击面板上的“教程”和“作者”按钮可以查看部分教程和得到软件的信息以及联系作者的方式;
  2. 当您遇到软件的一些bug或者漏洞时,很希望您能够联系作者并告知,或者您有一些好的修改意见和建议也欢迎来邮件,这将对该系统的完善作出极大贡献,而且也能够极大的提升用户体验感。
  3. 最后:当我们的软件出现卡死、闪退的情况时,我建议您通过计算机的“资源管理器”直接关闭软件进程,避免影响体验,之后重启软件即可,下面介绍资源管理器关闭软件的方法:
    1. 快捷键:ctrl+alt+delete打开控制面板,选择资源管理器选项;

  1. 找到软件进程-“音符文档助手”;

  1. 点击,选择结束任务;或者右键单击,选择结束任务即可关闭软件;

6、注意,如果当前目录下已经存在目标生成文件,系统会尽可能的在目标文件后面添加数字1,如“YF文件处理1111.pdf”,但最多添加8个1后还存在同名文件,系统判定您多次操作,会拒绝生成目标文件,此时请您先查看目录下文件决定是否留下同名文件之后再进行操作。 以及注意目标文件是生成到您选择的第一个文件目录下,请到该目录下寻找目标文件或者查看面板上的提示路径。

【最后】

  1. 感谢您使用本软件,希望这个软件能够解决您生活中的一些小问题;
  2. 本软件已开源,开源使世界更美好;
  3. 我的存在也许就是让世界更美好,感谢您的使用;
  4. 我拒绝任何人将源码作有害之用,但提倡有益的、健康的二次开发与使用;
  5. 项目、软件的最终解释权归作者所有;

附上GUI主页代码如下:---->完整代码请进入github/gitee获取:

# -*- coding: utf-8 -*-import wx
import win32api
import sys
import os
import wx.lib.agw.aui as aui
from wx.adv import Animation, AnimationCtrl
import glob
import fitz
import time# 模块
from word2pdf import doc2pdf
from globalVar import globalVarfilePath_w2p = ""class FileDrop(wx.FileDropTarget):def __init__(self, panel, statusText):wx.FileDropTarget.__init__(self)self.text = statusTextself.panel = paneldef OnDropFiles(self, x, y, filePath):globalVar.fileList = filePathpath = ""for i in filePath:path = path+"\n"+iself.text.Label = "="*10 + "选中文件路径"+"="*10 + pathreturn Trueclass mainFrame(wx.Frame):'''程序主窗口类,继承自wx.Frame'''id_open = 1id_help = 2id_word2pdf = 3id_pdf2word = 4id_mergePdf = 5id_cutPdf = 6id_img2pdf = 7id_pdf2img = 8id_author = 9fileName = ""def __init__(self, parent):'''构造函数'''wx.Frame.__init__(self, parent, -1, globalVar.APP_TITLE)self.SetBackgroundColour(wx.Colour(224, 224, 224))self.SetSize((620, 400))self.SetMaxSize((620, 400))self.Center()if hasattr(sys, "frozen") and getattr(sys, "frozen") == "windows_exe":exeName = win32api.GetModuleFileName(win32api.GetModuleHandle(None))icon = wx.Icon(exeName, wx.BITMAP_TYPE_ICO)else:icon = wx.Icon(globalVar.APP_ICON, wx.BITMAP_TYPE_ICO)self.SetIcon(icon)self.tb1 = self._CreateToolBar('F')self.tb2 = self._CreateToolBar()# self.tbv = self._CreateToolBar('V')p_left = wx.Panel(self, -1)# p_left.SetBackgroundColour("#90d7ec")p_center0 = wx.Panel(self, -1)image_file = ''with open("imgPath.txt", 'r', encoding="UTF-8") as f:image_file = f.readline()if not os.path.exists(image_file):image_file = globalVar.bgimgPathto_bmp_image = wx.Image(image_file, wx.BITMAP_TYPE_ANY).ConvertToBitmap()self.bitmap = wx.StaticBitmap(p_center0, -1, to_bmp_image, (0, 0), (400, 200))globalVar.bgimg = self.bitmapp_center1 = wx.Panel(self, -1)p_bottom = wx.Panel(self, -1)p_center0.SetBackgroundColour("White")p_bottom.SetBackgroundColour("White")image_file = 'res/addfile.png'to_bmp_image = wx.Image(image_file, wx.BITMAP_TYPE_ANY).ConvertToBitmap()self.bitmap = wx.StaticBitmap(p_bottom, -1, to_bmp_image, (0, 0), (400, 140))statusText0 = wx.StaticText(p_left, -1, globalVar.STATUS, pos=(0, 10), size=(200, 180), style=wx.ALIGN_LEFT)# statusText1 = wx.StaticText(p_left, -1, u"当前状态:word转PDF", pos=(15, 30), size=(200, -1), style=wx.ALIGN_CENTER)# statusText2 = wx.StaticText(p_left, -1, u"当前状态:PDF转word", pos=(15, 30), size=(200, -1), style=wx.ALIGN_CENTER)# statusText3 = wx.StaticText(p_left, -1, u"当前状态:其他", pos=(15, 30), size=(200, -1), style=wx.ALIGN_CENTER)# statusText0 = wx.StaticText(p_bottom, -1, "将文件拖曳到此开始实现文件转PDF", pos=(5, 10), size=(200, 200),#                             style=wx.ALIGN_LEFT)filepathText0 = wx.StaticText(p_center0, -1, "", pos=(0, 21), size=(500, -1), style=wx.ALIGN_LEFT)globalVar.textDetail = filepathText0# 文件拖曳fileDrop = FileDrop(p_center0, filepathText0)p_bottom.SetDropTarget(fileDrop)btn = wx.Button(p_left, -1, u'开始输出', pos=(30, 200), size=(100, -1))btn.Bind(wx.EVT_BUTTON, self.OnSwitch)btn.SetBackgroundColour('#f47920')btn = wx.Button(p_left, -1, u'更换背景', pos=(30, 260), size=(100, -1))btn.Bind(wx.EVT_BUTTON, self.changeBg)btn.SetBackgroundColour('white')text0 = wx.StaticText(p_center0, -1, u'当前操作:' + globalVar.status, pos=(0, 0), size=(400, 20), style=wx.ALIGN_CENTER)globalVar.textStatus = text0text0.SetFont(wx.Font(10, wx.FONTFAMILY_ROMAN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD))text0.SetBackgroundColour("#f36c21")text1 = wx.StaticText(p_center1, -1, u'我是第2页', pos=(40, 100), size=(200, -1), style=wx.ALIGN_LEFT)line = wx.StaticText(p_center0, -1, u'', pos=(0, 20), size=(400, 1), style=wx.ALIGN_CENTER)line.SetBackgroundColour("black")self._mgr = aui.AuiManager()self._mgr.SetManagedWindow(self)self._mgr.AddPane(self.tb1,aui.AuiPaneInfo().Name("ToolBar1").Caption(u"工具条").ToolbarPane().Top().Row(0).Position(0).Floatable(False))self._mgr.AddPane(self.tb2,aui.AuiPaneInfo().Name("ToolBar2").Caption(u"工具条").ToolbarPane().Top().Row(0).Position(1).Floatable(True))# self._mgr.AddPane(self.tbv, # aui.AuiPaneInfo().Name("ToolBarV").Caption(u"工具条").ToolbarPane().Right().Floatable(True)# )self._mgr.AddPane(p_left,aui.AuiPaneInfo().Name("LeftPanel").Left().Layer(1).MinSize((200, -1)).Caption(u"操作区").MinimizeButton(True).MaximizeButton(True).CloseButton(False))self._mgr.AddPane(p_center0,aui.AuiPaneInfo().Name("CenterPanel0").CenterPane().Show())self._mgr.AddPane(p_center1,aui.AuiPaneInfo().Name("CenterPanel1").CenterPane().Hide())self._mgr.AddPane(p_bottom,aui.AuiPaneInfo().Name("BottomPanel").Bottom().MinSize((-1, 100)).Caption(u"消息区").CaptionVisible(False).Resizable(True))self._mgr.Update()def _CreateToolBar(self, d='H'):'''创建工具栏'''bmp_open = wx.Bitmap('res/file.png', wx.BITMAP_TYPE_ANY)bmp_save = wx.Bitmap('res/pdf2img.png', wx.BITMAP_TYPE_ANY)bmp_help = wx.Bitmap('res/trans.png', wx.BITMAP_TYPE_ANY)bmp_about = wx.Bitmap('res/mine2.png', wx.BITMAP_TYPE_ANY)bmp_trans = wx.Bitmap('res/trans3.png', wx.BITMAP_TYPE_ANY)bmp_trans2 = wx.Bitmap('res/trans4.png', wx.BITMAP_TYPE_ANY)bmp_trans3 = wx.Bitmap('res/trans5.png', wx.BITMAP_TYPE_ANY)bmp_trans4 = wx.Bitmap('res/img2pdf.png', wx.BITMAP_TYPE_ANY)if d.upper() in ['V', 'VERTICAL']:tb = aui.AuiToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize,agwStyle=aui.AUI_TB_TEXT | aui.AUI_TB_VERTICAL)else:tb = aui.AuiToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, agwStyle=aui.AUI_TB_TEXT)tb.SetToolBitmapSize(wx.Size(16, 16))if d.upper() != 'F':tb.AddSimpleTool(self.id_mergePdf, u'PDF合并', bmp_trans2, u'合并多个PDF为一个PDF')tb.AddSimpleTool(self.id_cutPdf, u'PDF拆分', bmp_trans, u'将一个PDF拆分成多个')tb.AddSimpleTool(self.id_img2pdf, u'图片转PDF', bmp_trans3, u'将图片放到PDF文件中')tb.AddSeparator()tb.AddSimpleTool(self.id_pdf2img, u'PDF转图片', bmp_help, u'PDF每页转成一张图片')tb.AddSimpleTool(self.id_author, u'作者', bmp_about, u'关于作者')tb.Bind(wx.EVT_TOOL, self.dealFunction)else:tb.AddSimpleTool(self.id_open, u'File', bmp_open, u'打开文件')tb.AddSimpleTool(self.id_help, u'教程', bmp_help, u'使用教程')tb.AddSeparator()tb.AddSimpleTool(self.id_word2pdf, u'word转PDF', bmp_save, u'word文件转PDF文件')tb.AddSimpleTool(self.id_pdf2word, u'PDF转word', bmp_trans4, u'将PDF文件转为word文件')tb.Bind(wx.EVT_TOOL, self.dealFunction)tb.Realize()return tbdef word2pdf(self):if len(globalVar.fileList) == 0:d = wx.MessageDialog(None, u"请先选中文件再进行操作哦!", u"提示", wx.YES_NO | wx.ICON_QUESTION)if d.ShowModal() == wx.ID_OK:passd.Destroy()returnprogressMax = 100dialog = wx.ProgressDialog("处理进度", "正在处理中,请稍后···", progressMax)count = 0for i in globalVar.fileList:flag = 1result = 1if flag == 1:result = doc2pdf(i)if len(globalVar.fileList) < 3:time.sleep(1)count = count + int(100/len(globalVar.fileList))if count < 100:dialog.Update(count)dialog.Destroy()if len(globalVar.fileList) == 1:finalPath = ''for k in globalVar.fileList[0].split("\\")[:-1]:finalPath += k + "\\"globalVar.textDetail.SetLabel('目标文件保存至:' + finalPath)if result == 1:d = wx.MessageDialog(None, u"转换失败,可能已经存在文件"+i+".pdf", u"提示", wx.YES_NO | wx.ICON_QUESTION)if d.ShowModal() == wx.ID_OK:passd.Destroy()else:pass# d=wx.MessageDialog(None, u"转换成功", u"提示", wx.YES_NO | wx.ICON_QUESTION)# if d.ShowModal()==wx.ID_OK:# pass# d.Destroy()if len(globalVar.fileList) != 1:finalPath = ''for k in globalVar.fileList[0].split("\\")[:-1]:finalPath += k+"\\"globalVar.textDetail.SetLabel('目标文件保存至:'+finalPath)returndef pdf2word(self):if len(globalVar.fileList) == 0:d = wx.MessageDialog(None, u"请先选中文件再进行操作哦!", u"提示", wx.YES_NO | wx.ICON_QUESTION)if d.ShowModal() == wx.ID_OK:passd.Destroy()returnprogressMax = 100dialog = wx.ProgressDialog("处理进度", "正在处理中,请稍后···", progressMax)count = 0for i in globalVar.fileList:if i[-3:] != "pdf":d = wx.MessageDialog(None, u"文件"+i+"不是pdf文件,不能转换哦!", u"提示", wx.YES_NO | wx.ICON_QUESTION)if d.ShowModal() == wx.ID_OK:passd.Destroy()continuecount += int(100 / len(globalVar.fileList))if count < 100:dialog.Update(count)doc = fitz.open(i)docName = i[0:-4]+".docx"resultDoc = open(docName, "wb")for page in doc:text = page.get_text().encode("utf8")resultDoc.write(text)resultDoc.close()time.sleep(1)dialog.Destroy()finalPath = ''for k in globalVar.fileList[0].split("\\")[:-1]:finalPath += k+"\\"globalVar.textDetail.SetLabel('目标文件保存至:'+finalPath)returndef mergePdf(self):if len(globalVar.fileList) == 0:d = wx.MessageDialog(None, u"请先选中文件再进行操作哦!", u"提示", wx.YES_NO | wx.ICON_QUESTION)if d.ShowModal() == wx.ID_OK:passd.Destroy()returnpath = ''for j in globalVar.fileList[0].split("\\")[:-1]:path += j+"\\"docName = "YF操作PDF文件"times = 0while os.path.exists(path+docName + "(合并).pdf") and times < 8:docName += "1"times += 1if times == 8:d = wx.MessageDialog(None, u"当前目录存在多个相似PDF,请先移除此类文件再操作", u"提示", wx.YES_NO | wx.ICON_QUESTION)if d.ShowModal() == wx.ID_OK:passd.Destroy()returnprogressMax = 100dialog = wx.ProgressDialog("处理进度", "正在处理中,请稍后···", progressMax)count = 0resultDoc = fitz.open()for i in globalVar.fileList:if i[-3:] != "pdf":d = wx.MessageDialog(None, u"文件" + i + "不是pdf文件,不能合并哦!", u"提示", wx.YES_NO | wx.ICON_QUESTION)if d.ShowModal() == wx.ID_OK:passd.Destroy()continuecount += int(100/len(globalVar.fileList))if count < 100:dialog.Update(count)doc = fitz.open(i)resultDoc.insert_pdf(doc)resultDoc.save(path+docName + "(合并).pdf")resultDoc.close()time.sleep(1)dialog.Destroy()finalPath = ''for k in globalVar.fileList[0].split("\\")[:-1]:finalPath += k + "\\"globalVar.textDetail.SetLabel('目标文件保存至:' + finalPath)returndef cutPdf(self):if len(globalVar.fileList) == 0:d = wx.MessageDialog(None, u"请先选中文件再进行操作哦!", u"提示", wx.YES_NO | wx.ICON_QUESTION)if d.ShowModal() == wx.ID_OK:passd.Destroy()returnif globalVar.fileList[0][-3:] != "pdf":d = wx.MessageDialog(None, u"您当前选中的文件不是PDF文件哦,操作失败!", u"提示", wx.YES_NO | wx.ICON_QUESTION)if d.ShowModal() == wx.ID_OK:passd.Destroy()returnmessage = ""dlg = wx.TextEntryDialog(None, u"请按 'a-b' 的格式输入切割的起始页和结束页,如:1-23\n默认只对选中的第一个文件执行操作", u"输入提示", u"1-23")if dlg.ShowModal() == wx.ID_OK:message = dlg.GetValue()  # 获取文本框中输入的值dlg.Destroy()if len(message.split("-")) != 2:d = wx.MessageDialog(None, u"您的输入不正确,按照'a-b'格式输入哦!", u"提示", wx.YES_NO | wx.ICON_QUESTION)if d.ShowModal() == wx.ID_OK:passd.Destroy()returnif (not message.split("-")[0].isdigit()) or (not message.split("-")[1].isdigit()):d = wx.MessageDialog(None, u"您的输入不正确,按照'a-b'格式输入哦!", u"提示", wx.YES_NO | wx.ICON_QUESTION)if d.ShowModal() == wx.ID_OK:passd.Destroy()returnprogressMax = 100dialog = wx.ProgressDialog("处理进度", "正在处理中,请稍后···", progressMax)count = 0Doc = globalVar.fileList[0][0:-4]doc = fitz.open(globalVar.fileList[0])resultDoc = fitz.open()resultDoc.insert_pdf(doc, from_page=int(message.split("-")[0]) - 1, to_page=int(message.split("-")[0]) - 1)resultDoc.save(Doc + "(拆分).pdf")resultDoc.close()count = 100time.sleep(1)dialog.Update(count)dialog.Destroy()finalPath = ''for k in globalVar.fileList[0].split("\\")[:-1]:finalPath += k + "\\"globalVar.textDetail.SetLabel('目标文件保存至:' + finalPath)returndef img2pdf(self):doc = fitz.open()if len(globalVar.fileList) == 0:d = wx.MessageDialog(None, u"请先选中文件再进行操作哦!", u"提示", wx.YES_NO | wx.ICON_QUESTION)if d.ShowModal() == wx.ID_OK:passd.Destroy()returnprogressMax = 100dialog = wx.ProgressDialog("处理进度", "正在处理中,请稍后···", progressMax)keepGoing = Truecount = 0for i in globalVar.fileList:if i[-3:] != "jpg" and i[-3:] != "png":d = wx.MessageDialog(None, u"选中的图片中含有非jpg/png图片,不能加入哦!", u"提示", wx.YES_NO | wx.ICON_QUESTION)if d.ShowModal() == wx.ID_OK:passd.Destroy()continuecount = count+int(100/(len(globalVar.fileList)))if count < 100:dialog.Update(count)for img in sorted(glob.glob(i)):imgdoc = fitz.open(img)imgpdf = imgdoc.convert_to_pdf()imgPDF = fitz.open("pdf", imgpdf)doc.insert_pdf(imgPDF)path = ''for j in globalVar.fileList[0].split("\\")[:-1]:path += j + "\\"docName = "YF操作PDF文件"times = 0while os.path.exists(path+docName + "(img2pdf).pdf") and times < 8:docName += "1"times += 1if times == 8:d = wx.MessageDialog(None, u"当前目录存在多个相似PDF,请先移除此类文件再操作", u"提示", wx.YES_NO | wx.ICON_QUESTION)if d.ShowModal() == wx.ID_OK:passd.Destroy()returndoc.save(path+docName+"(img2pdf).pdf")doc.close()time.sleep(1)dialog.Destroy()finalPath = ''for k in globalVar.fileList[0].split("\\")[:-1]:finalPath += k + "\\"globalVar.textDetail.SetLabel('目标文件保存至:' + finalPath)returndef pdf2img(self):if len(globalVar.fileList) == 0:d = wx.MessageDialog(None, u"请先选中文件再进行操作哦!", u"提示", wx.YES_NO | wx.ICON_QUESTION)if d.ShowModal() == wx.ID_OK:passd.Destroy()returnif globalVar.fileList[0][-3:] != "pdf":d = wx.MessageDialog(None, u"您当前选中的文件不是PDF文件哦,操作失败!", u"提示", wx.YES_NO | wx.ICON_QUESTION)if d.ShowModal() == wx.ID_OK:passd.Destroy()returnmessage = ""dlg = wx.TextEntryDialog(None, u"请按 'a-b' 的格式输入生成图片的起始页和结束页,如:1-23\n默认只对选中的第一个文件执行操作", u"输入提示", u"1-23")if dlg.ShowModal() == wx.ID_OK:message = dlg.GetValue()  # 获取文本框中输入的值dlg.Destroy()if len(message.split("-")) != 2:d = wx.MessageDialog(None, u"您的输入不正确,按照'a-b'格式输入哦!", u"提示", wx.YES_NO | wx.ICON_QUESTION)if d.ShowModal() == wx.ID_OK:passd.Destroy()returnif (not message.split("-")[0].isdigit()) or (not message.split("-")[1].isdigit()):d = wx.MessageDialog(None, u"您的输入不正确,按照'a-b'格式输入哦!", u"提示", wx.YES_NO | wx.ICON_QUESTION)if d.ShowModal() == wx.ID_OK:passd.Destroy()returnDoc = globalVar.fileList[0][0:-4]doc = fitz.open(globalVar.fileList[0])progressMax = 100dialog = wx.ProgressDialog("处理进度", "正在处理中,请稍后···", progressMax)count = 0for pg in range(int(message.split("-")[0]) - 1, int(message.split("-")[1])):count = count + int(100/(int(message.split("-")[1]) - int(message.split("-")[0])))if count < 100:dialog.Update(count)page = doc[pg]zoom = int(100)rotate = int(0)H = 20M = 40L = 60trans = fitz.Matrix(zoom / M, zoom / M).prerotate(rotate)pm = page.get_pixmap(matrix=trans, alpha=True)pm.save(Doc + "第%s页.png" % str(pg + 1))time.sleep(1)dialog.Destroy()finalPath = ''for k in globalVar.fileList[0].split("\\")[:-1]:finalPath += k + "\\"globalVar.textDetail.SetLabel('目标文件保存至:' + finalPath)returndef openAuthor(self):globalVar.textDetail.SetLabel("作者:唐YF\n联系方式:3538182550@qq.com(邮箱)\n状态:""项目还在进一步维护中,敬请期待\n项目:本项目已开源,欢迎访问本人代码托管仓库\n""仓库地址:\n""gitee: https://gitee.com/TangGarlic/fileSystem.git\n""github: https://github.com/TonyTang-dev/fileSystem.git\n""写在最后:感谢您使用本软件,如软件有问题或您有新需求,记得联系我")returndef openFile(self):# 打开开文件对话框dlg = wx.FileDialog(self, u"选择文件", style=wx.FD_MULTIPLE)if dlg.ShowModal() == wx.ID_OK:# print(dlg.GetPath())  # 文件夹路径filePath_w2p = dlg.GetPaths()globalVar.fileList.clear()globalVar.fileList = filePath_w2ppath = ""for i in filePath_w2p:path = path + "\n" + iglobalVar.textDetail.Label = "=" * 10 + "选中文件路径" + "=" * 10 + pathdlg.Destroy()returndef openHelp(self):globalVar.textDetail.SetLabel("0、安装:将文件夹放到电脑中,为“音符文档助手.exe”建快捷方式即可\n""1、首先在上方工具栏选择您需要进行的操作,状态栏会提示您当前状态\n""2、若是对文件的操作,先选择文件,拖动文件到下方/点击File打开均可\n""3、确定好文件之后点击左下角“开始输出”接口开始输出\n""4、word转pdf功能目前需要电脑中已安装有office套件/wps\n""5、选择功能-->选择文件-->点击转换""注意:\n""a. 拖动文件时可多个文件一起选中拖动到下方文件框\n""b. 本软件不获取您的个人信息,如有卡顿指定是软件有bug,不必惊慌\n""c. 如果您的一些操作导致软件卡死/闪退,那就是软件有问题--联系作者\n""d. 如有疑问,请查看软件文件夹目录下的“音符文档助手使用手册.pdf”\n""e. 如有需求或疑问请联系作者(点击“作者”可见/3538182550@qq.com)")returndef dealFunction(self, event):index = event.GetId()if globalVar.operationId == 2 or globalVar.operationId == 9:globalVar.textDetail.SetLabel("")globalVar.fileList.clear()globalVar.operationId = index# id_open = 1 id_help = 2  id_word2pdf = 3 id_pdf2word = 4# id_mergePdf = 5 id_cutPdf = 6 id_img2pdf = 7 id_pdf2img = 8 id_author = 9if index == 1:globalVar.status = "打开本地文件"globalVar.textStatus.SetLabel("当前操作:"+globalVar.status)self.openFile()elif index == 2:globalVar.status = "使用教程"globalVar.textStatus.SetLabel("当前操作:"+globalVar.status)self.openHelp()elif index == 3:globalVar.status = "word转pdf"globalVar.textStatus.SetLabel("当前操作:"+globalVar.status)# self.word2pdf()elif index == 4:globalVar.status = "pdf转word"globalVar.textStatus.SetLabel("当前操作:"+globalVar.status)# self.pdf2word()elif index == 5:globalVar.status = "合并pdf"globalVar.textStatus.SetLabel("当前操作:"+globalVar.status)# self.mergePdf()elif index == 6:globalVar.status = "打开本地文件"globalVar.textStatus.SetLabel("当前操作:"+globalVar.status)# self.cutPdf()elif index == 7:globalVar.status = "图片转pdf"globalVar.textStatus.SetLabel("当前操作:"+globalVar.status)# self.img2pdf()elif index == 8:globalVar.status = "pdf转图片"globalVar.textStatus.SetLabel("当前操作:"+globalVar.status)# self.pdf2img()elif index == 9:globalVar.status = "关于作者"globalVar.textStatus.SetLabel("当前操作:"+globalVar.status)self.openAuthor()def OnSwitch(self, evt):# path = filepathText0.Label.split("\n")[1]  # 获得文件路径## if path == "":#     d = wx.MessageDialog(None, u"请先选择文件再点击转换哦", u"提示", wx.YES_NO | wx.ICON_QUESTION)#     if d.ShowModal() == wx.ID_OK:#         pass#     d.Destroy()#     return# statusText0 = wx.StaticText(panel, -1, "转换中···", pos=(80, 72), size=(72, -1), style=wx.ALIGN_CENTER)# statusText0.SetBackgroundColour("White")# animation = AnimationCtrl(panel, -1, Animation('res/5.gif'), pos=(80, 90))  # 创建一个动画# animation.Play()  # 播放动图# mainFrame(None).word2PDF(path)  # 开始转换# animation.Stop()# statusText0.Show(0)# animation.Destroy()index = globalVar.operationId# if index == 1:#     # globalVar.status = "打开本地文件"#     # globalVar.textStatus.SetLabel("当前操作:"+globalVar.status)#     self.openFile()# elif index == 2:# globalVar.status = "使用教程"# globalVar.textStatus.SetLabel("当前操作:"+globalVar.status)# self.openHelp()if index == 0:globalVar.textStatus.SetLabel("当前操作:待选择")print("1")elif index == 3:# globalVar.status = "word转pdf"# globalVar.textStatus.SetLabel("当前操作:"+globalVar.status)self.word2pdf()elif index == 4:# globalVar.status = "pdf转word"# globalVar.textStatus.SetLabel("当前操作:"+globalVar.status)self.pdf2word()elif index == 5:# globalVar.status = "合并pdf"# globalVar.textStatus.SetLabel("当前操作:"+globalVar.status)self.mergePdf()elif index == 6:# globalVar.status = "打开本地文件"# globalVar.textStatus.SetLabel("当前操作:"+globalVar.status)self.cutPdf()elif index == 7:# globalVar.status = "图片转pdf"# globalVar.textStatus.SetLabel("当前操作:"+globalVar.status)self.img2pdf()elif index == 8:# globalVar.status = "pdf转图片"# globalVar.textStatus.SetLabel("当前操作:"+globalVar.status)self.pdf2img()# elif index == 9:# globalVar.status = "关于作者"# globalVar.textStatus.SetLabel("当前操作:"+globalVar.status)# self.openAuthor()# globalVar.textDetail.SetLabel('')globalVar.fileList.clear()def changeBg(self, evt):# 打开开文件对话框dlg = wx.FileDialog(self, u"选择文件", style=wx.FD_OPEN)if dlg.ShowModal() == wx.ID_OK:# print(dlg.GetPath())  # 文件夹路径imgPath = dlg.GetPath()if imgPath[-3:] != "jpg" and imgPath[-3:] != "png":d = wx.MessageDialog(None, u"请选择jpg/png图片才行哦!", u"提示", wx.YES_NO | wx.ICON_QUESTION)if d.ShowModal() == wx.ID_OK:d.Destroy()dlg.Destroy()returnwith open("imgPath.txt", "w+", encoding="UTF-8") as f:f.write(imgPath)img = wx.Image(imgPath, wx.BITMAP_TYPE_ANY).Rescale(400, 200).ConvertToBitmap()globalVar.bgimg.SetBitmap(wx.BitmapFromImage(img))dlg.Destroy()returnclass mainApp(wx.App):def OnInit(self):self.SetAppName(globalVar.APP_TITLE)self.Frame = mainFrame(None)self.Frame.Show()return Trueif __name__ == "__main__":app = mainApp()app.MainLoop()

最后的最后,请你相信,没有到不了的明天,今天的困难和不顺终将烟消云散,我们的明天依然美丽,因为每个人的一生都是一次美丽的远行。

==========================================================

基于python的pdf文件处理系统相关推荐

  1. python上传文件到onedrive_基于Python的onedrive文件本地化浏览系统–PyOne

    基于Python的onedrive文件本地化浏览系统–PyOne PyOne是一款基于Python-Flask的onedrive文件本地化浏览系统,使用MongoDB储存文件列表,使用redis缓存数 ...

  2. NVIDIA专家实战演示,教你快速搭建基于Python的车辆信息识别系统

    主讲人 | 何琨 英伟达 量子位编辑 | 公众号 QbitAI 随着智慧城市.自动驾驶的快速落地,车辆的检测和识别应用场景非常广泛,如车牌识别.车流统计.车辆属性识别等. 近日,在英伟达x量子位发起的 ...

  3. 利用Python提取PDF文件中的文本信息

    如何利用Python提取PDF文件中的文本信息 日常工作中我们经常会用到pdf格式的文件,大多数情况下是浏览或者编辑pdf信息,但有时候需要提取pdf中的文本,如果是单个文件的话还可以通过复制粘贴来直 ...

  4. python 文件格式转换_数据分析:基于Python的自定义文件格式转换系统

    ( 白宁超 2018年7月16日14:47:41 ) 导读:随着大数据的快速发展,自然语言处理.数据挖掘.机器学习技术应用愈加广泛.针对大数据的预处理工作是一项庞杂.棘手的工作.首先数据采集和存储,尤 ...

  5. Python:PDF文件转图像

    Python:PDF文件转图像 什么是PyMuPDF? Python环境下想要将PDF文件转图像,可以使用PyMuPDF库. PyMuPDF是MuPDF的Python绑定-"轻量级PDF和X ...

  6. python 模拟考试系统_Project-OTS: Online Exam System written on Python 3. 基于Python 3的在线考试系统。...

    Project-OTS Online Exam System written on Python 3. Your can first try it on ots.icystal.top. 基于Pyth ...

  7. 基于 Python django 的小型论坛系统

    django_forum This is a small and simple forum which uses the Django Framework (written in Python lan ...

  8. 【word2vec】python读取pdf文件,通过词向量寻找相关词语

    1. 什么是Word2vec 对于自然语音处理而言,首先要做的就是将文字转换为计算机能看懂的数字,也就是说,将词语进行数字化. (1)one-hot编码,比较常用的一种编码方式,又叫独热编码. 对于一 ...

  9. 如何基于python实现pdf编辑器

    如何基于python实现pdf编辑器 要基于Python实现PDF编辑器,可以使用PyPDF2或pdfrw等库来读取.编辑和写入PDF文件.以下是一些基本的步骤: 安装PyPDF2或pdfrw库: p ...

最新文章

  1. [摘录]第二部分 战略决策(2)
  2. 给自定义控件(Web Control)添加事件的几种方法。前两种方法可以不实现IPostBackEventHandler...
  3. php 替换某一行,PHP中如何替换换行符?
  4. antd 中table上加不同字体颜色_字体渲染系统!微软终于决定优化Win10字体模糊问题...
  5. 守卫者的挑战(guard)
  6. Python一直报错:SyntaxError: invalid syntax 的原因及解决办法
  7. lynda ux_举办UX午餐并学习并成为UX英雄
  8. window对象(一) 计时器 定位导航 url解析 浏览历史 对话框 消息推送
  9. From Apprentice To Artisan 翻译 08
  10. Tomcat中设计模式-门面模式
  11. python秩和比综合评价代码记录
  12. MySQL--binlog--介绍/用法
  13. 算术收益率与对数收益率(几何收益率)
  14. 【错误记录】编译 Linux 内核报错 ( Unable to find the ncurses package. )
  15. android botton控件基本属性
  16. 青春使命网页制作html,青春使命句子
  17. Docker中安装并配置redis
  18. 爬取京东商品信息出现登陆页面的解决
  19. PTA-至多删三个字符:动态规划
  20. 学习Android系统

热门文章

  1. 达特茅斯计算机博士专业,2020年达特茅斯学院博士热门专业
  2. 前端性能分析—前端优化
  3. Nature Gradient 自然梯度
  4. 淘客漏洞群用的什么机器人_淘客返利机器人常见封号原因及解决办法
  5. 辛东方:papi酱凭什么能够走红 背后的炒作令人发抖
  6. 温故而知新--Java基础(三):Java常用集合类(上)
  7. 【vulnhub】Raven2
  8. Ubuntu 20.04开启热点(连着wify开wify)
  9. 爱因斯坦 《社会与个人》
  10. PMP考试时间推迟了,如何办理退缓考?