双面文件,单面分别扫描后,用Python拼合排序生成PDF的方法

故事背景

当初买一体机的时候,一味图便宜想着要啥自行车,本来是准备只买一个单独的激光打印机的,好久以前的HP激光打印机P1020用的十分满意。
奈何商店里一体机的售价普遍比纯打印机要便宜,就只好捏着鼻子买了一个一体机,当然是最便宜,也最低配置的一款,只有单面扫描功能,型号是Brother DCP-L2550DW。(其实是因为这款当时在打折)
正巧年底许多文件需要归档,动辄几十页,虽然有送纸器这种好东西可以做到连续扫描,但是每次只能扫单面。
尝试使用Adobe Acrobat将正面和反面一一拼接,既容易出错,效率也低。
经过不懈地努力与尝试 (面向Google编程) 成功摸索出了用Python来实现分别扫描单面的文件,再拼合排序生成PDF的方法。
分享给大家——


需要的库

需要PyPDF2

pip install pypdf2


#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import itertools as itt
import sys
import PyPDF2 as PDF

def main():
    fbase = sys.argv[1]
    pdf_out = PDF.PdfFileWriter()

    with open(fbase + "_1.pdf", 'rb') as f_odd:
        with open(fbase + "_2.pdf", 'rb')  as f_even:
            pdf_odd = PDF.PdfFileReader(f_odd)
            pdf_even = PDF.PdfFileReader(f_even)

            for p in itt.chain.from_iterable(
                itt.zip_longest(
                    pdf_odd.pages,
                    reversed(pdf_even.pages),
                )
            ):
                if p:
                    pdf_out.addPage(p)

            with open(fbase + ".pdf", 'wb') as f_out:
                pdf_out.write(f_out)

    return 0

if __name__ == "__main__":

    if len(sys.argv) != 2:
        print("Check your command format carefully!")
        sys.exit(1)

    sys.exit(main())

使用方法

本段代码在Windows 10 Pro 64位英文版, Python 3.9.1下运行良好。
本人仅测试过英文文件名,英文文件路径,未测试过包含中文与空格的文件名与路径。
如有意料之外的问题,可尝试修改文件名加以解决。

步骤一

把一摞文档放进扫描仪,扫描正面,得到单数页Pg1,Pg3,Pg5,Pg7,Pg9→∞
命名为
XXX_1.pdf

扫描之后将整摞文档背面朝上,再次扫描,得到双数页 ∞→Pg10,Pg8,Pg6,Pg4,Pg2
命名为
XXX_2.pdf

注意
XXX_1与XXX_2的XXX部分应保持一致,最好使用英文,避免空格。
文件名一定要带有 _1和 _2
_1是单数页面(正面)
_2是双数页面(反面)
XXX_1与XXX_2页数应当一致。

步骤二

将这两个pdf文件拷贝至本段python代码所在的文件夹

假设:

  1. 以上代码被保存为pdfm.py
  2. 需要将XXX_1与XXX_2保存为output.pdf
步骤三

打开CMD,进入该文件夹所在路径后,输入:

python pdfm.py XXX

即可在文件夹中得到XXX.pdf
示例:
Use Command Prompt on Windows 10


版权声明

虽然我刚学python没几天,水平也不高,但是我要说,就算将来有一天我的水平上来了,我的代码也没有什么好稀罕的,我也不靠它吃饭,所以对于以上的内容,你们大家喜欢就拿去用吧,转载也好,修改,复制也好,都是随意的,也不用跟我打招呼。
不光是本文中的代码,我之前发的文章,以后发的文章都是这样,你们看了喜欢,觉得有用就拿去用。
只要能够帮到各位解决麻烦,就最好不过了。

如果发现了什么不得了的错误,吱一声,我有时间有能力就修复一下。
某些高手前辈觉得我的东西幼稚,错误多,要特意跑来教训我一下,对于这样的高人,还是敬谢不敏了吧~~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值