故事背景
当初买一体机的时候,一味图便宜,想着要啥自行车,本来是准备只买一个单独的激光打印机的,好久以前的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代码所在的文件夹
假设:
- 以上代码被保存为pdfm.py
- 需要将XXX_1与XXX_2保存为output.pdf
步骤三
打开CMD,进入该文件夹所在路径后,输入:
python pdfm.py XXX
即可在文件夹中得到XXX.pdf
示例:
版权声明
虽然我刚学python没几天,水平也不高,但是我要说,就算将来有一天我的水平上来了,我的代码也没有什么好稀罕的,我也不靠它吃饭,所以对于以上的内容,你们大家喜欢就拿去用吧,转载也好,修改,复制也好,都是随意的,也不用跟我打招呼。
不光是本文中的代码,我之前发的文章,以后发的文章都是这样,你们看了喜欢,觉得有用就拿去用。
只要能够帮到各位解决麻烦,就最好不过了。
如果发现了什么不得了的错误,吱一声,我有时间有能力就修复一下。
某些高手前辈觉得我的东西幼稚,错误多,要特意跑来教训我一下,对于这样的高人,还是敬谢不敏了吧~~