python自动化办公 pdf,用python实现办公自动化pdf

  python自动化办公 pdf,用python实现办公自动化pdf

  本文主要为大家分享一个Python办公自动化小工具——PDF拆分工具。文章中的示例代码解释得很详细,感兴趣的朋友可以和边肖一起尝试一下。

  00-1010需求分析代码实现今天继续分享真实的自动化办公案例。希望Python爱好者能从中得到一些启发,在工作和生活中多应用Python,让自己的工作事半功倍!

  

目录

  有必要从PDF中取出几页保存为新的PDF。为了以后使用方便,这个工具需要做成傻乎乎的有GUI页面的形式。

  选择源pdf文件,然后指定生成的新pdf文件的名称和位置,以及要拆分的页面信息,就可以得到新的pdf文件了。

  

需求

  对于Python GUI,我们有太多的选择。先做个简单的横向对比。

  概括地说,大型GUI工具包括:

  QtwxWindows客户库(基维,托加等。)Web相关(HTML,Flask等。)但是今天我们选择的工具是appJar,是一个从事教育的大神发明的,所以可以提供更简单的GUI创建过程,而且完全基于Tkinter,Python默认支持。

  

需求解析

  首先,为了实现PDF操作,我在这里选择了pypdf2库。

  让我们先硬编码一个输入和输出的例子。

  fromPyPDF2importPdfFileWriter,PdfFileReader

  infile=Input.pdf

  outfile=Output.pdf

  page_range=1-2,6

  接下来,我们实例化PdfFileWriter和PdfFIleReader对象,并创建实际的Output.pdf文件。

  output=PdfFileWriter()

  input _ pdf=PdfFileReader(open(infile, rb ))

  output_file=open(outfile, wb )

  下面复杂的一点是,你需要拆分pdf,提取页面,保存在列表中。

  page _ ranges=(x . split(-)for Xin page _ range . split(,))

  range _ list=[iforinpage _ rangesforinrange(int(r[0]),int(r[-1]) 1)]

  最后,将内容从原始文件复制到新文件中。

  forpinrange_list:

  output . add page(input _ pdf . get page(p-1))

  output.write(输出文件)

  让我们来构建GUI界面。

  这个用于分割PDF的小工具需要具有以下功能:

  可以通过标准的文件浏览器选择pdf文件,可以选择输出文件的位置和文件名,可以自定义提取哪些页面,有一些错误。通过PIP安装appJar之后,我们就可以编码了。

  fromappJarimportgui

  fromPyPDF2importPdfFileWriter,PdfFileReader

  frompathlibimportPath

  创建GUI窗口

  app=gui(PDFSplitter ,useTtk=True)

  app . settktheme( default )

  app.setSize(500,200)

  我在这里使用默认的主题,但是当然我可以切换各种主题模式。

  下面是添加标签和数据输入组件。

  app.addLabel(C

  hoose Source PDF File")

  app.addFileEntry("Input_File")

  app.addLabel("Select Output Directory")

  app.addDirectoryEntry("Output_Directory")

  app.addLabel("Output file name")

  app.addEntry("Output_name")

  app.addLabel("Page Ranges: 1,3,4-10")

  app.addEntry("Page_Ranges")

  

  接下来添加按钮,处理和退出,按下按钮,调用如下函数

  

app.addButtons(["Process", "Quit"], press)

  

  最后就是运行这个 app 啦

  

# start the GUI

  app.go()

  

  这样我们就完成了 GUI 的搭建,下面编写内部处理逻辑。程序读取任何输入,判断是否为 PDF,并拆分

  

def press(button):

      if button == "Process":

          src_file = app.getEntry("Input_File")

          dest_dir = app.getEntry("Output_Directory")

          page_range = app.getEntry("Page_Ranges")

          out_file = app.getEntry("Output_name")

          errors, error_msg = validate_inputs(src_file, dest_dir, page_range, out_file)

          if errors:

              app.errorBox("Error", "\n".join(error_msg), parent=None)

          else:

              split_pages(src_file, page_range, Path(dest_dir, out_file))

      else:

          app.stop()

  

  如果单击 处理(Process)按钮,则调用 app.getEntry() 检索输入值,每个值都会被存储,然后通过调用 validate_inputs() 进行验证

  来看看 validate_inputs 函数

  

def validate_inputs(input_file, output_dir, range, file_name):

      errors = False

      error_msgs = []

      # Make sure a PDF is selected

      if Path(input_file).suffix.upper() != ".PDF":

          errors = True

          error_msgs.append("Please select a PDF input file")

      # Make sure a range is selected

      if len(range) < 1:

          errors = True

          error_msgs.append("Please enter a valid page range")

      # Check for a valid directory

      if not(Path(output_dir)).exists():

          errors = True

          error_msgs.append("Please Select a valid output directory")

      # Check for a file name

      if len(file_name) < 1:

          errors = True

          error_msgs.append("Please enter a file name")

      return(errors, error_msgs)

  

  这个函数就是执行一些检查来确保输入有数据并且有效

  在收集验证了所有数据后,就可以调用 split 函数来处理文件了

  

def split_pages(input_file, page_range, out_file):

      output = PdfFileWriter()

      input_pdf = PdfFileReader(open(input_file, "rb"))

      output_file = open(out_file, "wb")

      page_ranges = (x.split("-") for x in page_range.split(","))

      range_list = [i for r in page_ranges for i in range(int(r[0]), int(r[-1]) + 1)]

      for p in range_list:

          # Need to subtract 1 because pages are 0 indexed

          try:

              output.addPage(input_pdf.getPage(p - 1))

          except IndexError:

              # Alert the user and stop adding pages

              app.infoBox("Info", "Range exceeded number of pages in input.\nFile will still be saved.")

              break

      output.write(output_file)

      if(app.questionBox("File Save", "Output PDF saved. Do you want to quit?")):

          app.stop()

  

  好了,这样我们就完成了一个简易的 GUI 拆分 PDF 文件的工具喽

  到此这篇关于Python自动化办公之编写PDF拆分工具的文章就介绍到这了,更多相关Python PDF拆分内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: