自动单双面合并PDF的工具

经常扫描的时候通过自动扫描仪,正面扫一次,反面扫一次,但是反面是逆页序的,如果手工拼在一起,特别费劲。所以可以用python写个小工具自动拼在一起,扫描完成后,奇数页命名为odd.pdf,偶数页命名为even.pdf,和这个小工具放在一个目录下,就可以实现自动合并。PyPDF2这个package不能用3.0版本及往上的,后面的函数名改了,2.12.1版本没问题。

import os
import ntpath
import sys

import PyPDF2

class File:
    def __init__(self, path: str):
        if not ntpath.exists(path):
            print('文件不存在')
            raise FileNotFoundError
        self.abspath = ntpath.abspath(path)
        self.filetype = ntpath.splitext(self.abspath)[1]
        self.filename = ntpath.splitext(ntpath.basename(self.abspath))[0]
        self.dirpath = ntpath.dirname(self.abspath) + '\\'

def merge(file1, file2):
    a = File(file1)
    b = File(file2)
    if a.filetype != '.pdf' or b.filetype != '.pdf':
        print('文件类型错误')
        os.system('pause')
        exit(1)
    f1 = open('odd.pdf', 'rb')
    f2 = open('even.pdf', 'rb')
    reader1 = PyPDF2.PdfFileReader(f1)
    reader2 = PyPDF2.PdfFileReader(f2)
    writer = PyPDF2.PdfFileWriter()
    if reader1.numPages != reader2.numPages:
        print('页数不相等')
        os.system('pause')
        exit(2)
    for i in range(reader1.numPages):
        writer.addPage(reader1.getPage(i))
        writer.addPage(reader2.getPage(-(i + 1)))
    newf = open('combine.pdf', "wb")
    writer.write(newf)
    f1.close()
    f2.close()
    newf.close()


def main():
    import sys, os

    config_name = 'myapp.cfg'

    if getattr(sys, 'frozen', False):
        application_path = os.path.dirname(sys.executable)
        running_mode = 'Frozen/executable'
    else:
        try:
            app_full_path = os.path.realpath(__file__)
            application_path = os.path.dirname(app_full_path)
            running_mode = "Non-interactive (e.g. 'python myapp.py')"
        except NameError:
            application_path = os.getcwd()
            running_mode = 'Interactive'

    config_full_path = os.path.join(application_path, config_name)

    print('Running mode:', running_mode)
    print('  Appliction path  :', application_path)
    os.chdir(application_path)

    merge("odd.pdf","even.pdf")
  #  args: list = sys.argv[1:]
 #   i = len(args)
  #  if i >= 2 and i % 2 == 0:
  #      args.sort()
  #      for j in range(0, i, 2):
  #          merge(args[j], args[j + 1])


if __name__ == '__main__':
    main()

我这里编译好的可以直接运行的版本

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注