目录
背景
期末临近,我们的一门课程是开卷考试,可比较坑的是这门课打印店完全没有资料,无奈我们只能使用老师发到群里课件当做开卷资料。可最要命的是我在整和删减完老师所有的课件后发现一共有700页PPT!如果不对这些PPT进行拼接的话光是打印费就不菲,而且打完也是老厚一本,不好携带,可我没有WPS的会员,而且在网上也没找到使用wps进行PDF拼接的方法(以2X2或者2X4的形式进行拼接),于是只好自己写个脚本实现。
代码实现
import PyPDF2
A4Wid = 8.27*72
A4Hig = 11.69*72
def merge_pages(pdf_file_path, output_file_path):
pdf_reader = PyPDF2.PdfFileReader(open(pdf_file_path, 'rb'))
pdf_writer = PyPDF2.PdfFileWriter()
num_pages = pdf_reader.numPages
for start in range(0, num_pages, 4):
end = min(start + 4, num_pages)
new_page = pdf_writer.add_blank_page(width=A4Wid*2, height=A4Hig)
for i, page_num in enumerate(range(start, end)):
page = pdf_reader.getPage(page_num)
new_page.mergeTranslatedPage(page, i % 2 * A4Wid, (1 - i // 2) * A4Hig*0.5)
print('进度:', (page_num * 100.0 / num_pages), '%')
with open(output_file_path, 'wb') as output_file:
pdf_writer.write(output_file)
我们使用PyPDF2库函数实现该功能。其中纸张尺寸和每页PDF页数可根据需要修改。首先我们创建PDF文件的读写操作句柄。读取完老的PDF文件后我们获取PDF文件的页数。之后我们以老PDF文件的每4张文件为一个周期,直到遍历完所有的老PDF文件后结束大循环。获取到每个周期的4张PDF后我们再创建新的一页PDF,并将老PDF的4张分别传送到新的一页的四个位置。完成后打印进度。大循环结束后保存新的PDF文件。
效果展示
查看拼接进度:
结果:
原文件:
拼接后: