【python自动化办公(11)】python实现PDF合并及页面删减、排序和旋转(range知识点的讲解)

利用pypdf2分割PDF

PdfFileReader(), PdfFilewriter()

import os
os.chdir('D:\\python_major\\auto_office11')
from PyPDF2 import PdfFileReader,PdfFileWriter

pdf_reader = PdfFileReader("Netease Q2 2019 Earnings Release-Final.pdf")
for page in range(pdf_reader.getNumPages()):
    pdf_writer = PdfFileWriter()
    pdf_writer.addPage(pdf_reader.getPage(page))
    with open("分割后的PDF文件/Netease Q2 2019 Earnings {}.pdf".format(page), "wb") as out:
        pdf_writer.write(out)

需要注意的是"分割后的PDF"这个文件夹要已经存在或者通过代码创建,否则系统会报错

–> 输出结果为:
在这里插入图片描述

利用pypdf2合并PDF

import os
os.chdir('D:\\python_major\\auto_office11')
from PyPDF2 import PdfFileReader,PdfFileWriter

pdf_writer = PdfFileWriter()
for page in range(16):
    pdf_reader = PdfFileReader("分割后的PDF文件/Netease Q2 2019 Earnings {}.pdf".format(page))
    for page in range(pdf_reader.getNumPages()):
        pdf_writer.addPage(pdf_reader.getPage(page))
    
with open("merge.pdf", "wb") as out:
    pdf_writer.write(out)

–> 输出结果为:
在这里插入图片描述

旋转PDF某一页

.rotateClockwise(90的倍数) 顺时针旋转90度
.rotateCounterClockwise(90的倍数) 逆时针旋转90度

import os
os.chdir('D:\\python_major\\auto_office11')
from PyPDF2 import PdfFileReader,PdfFileWriter

pdf_reader = PdfFileReader("Netease Q2 2019 Earnings Release-Final.pdf")
pdf_writer = PdfFileWriter()
page = pdf_reader.getPage(0).rotateClockwise(90)
pdf_writer.addPage(page)
page = pdf_reader.getPage(1).rotateCounterClockwise(90)
pdf_writer.addPage(page)

with open("rotated.pdf", "wb") as out:
    pdf_writer.write(out)

–> 输出结果为:
在这里插入图片描述

排序PDF页面

直接按照期望的顺序添加页面即可,此处例子为倒序排列

import os
os.chdir('D:\\python_major\\auto_office11')
from PyPDF2 import PdfFileReader,PdfFileWriter

pdf_reader = PdfFileReader("Netease Q2 2019 Earnings Release-Final.pdf")
pdf_writer = PdfFileWriter()
for page in range(pdf_reader.getNumPages() - 1, -1, -1):
    pdf_writer.addPage(pdf_reader.getPage(page))
    
with open("reordered.pdf", "wb") as out:
    pdf_writer.write(out)

–> 输出结果为:
在这里插入图片描述

综合应用

编写一个Python程序,要求

(1)打开文件"Netease Q2 2019 Earnings Release-Final.pdf"

(2)分割奇数页(第1、3、5…页)

(3)倒序保存页面

(4)生成reordered.pdf文件

关于range的知识:range作为一个生成器,主要是用来生成数值数据的

ls = list(range(10))
print(ls)

–> 输出结果为: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

生成倒序数值数据的两种方式

ls_1= [ i for i in range(10,-1,-1)]
#方法1
ls_1 = list(range(10,-1,-1))
#方法2
print(ls_1)

–> 输出结果为:[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

按照特定的要求生成数值数据(比如偶数位数值输出)

ls_3 = [ i for i in range(0,10,2)]
print(ls_3)

–> 输出结果为:[0, 2, 4, 6, 8]

参考代码

import os
os.chdir('D:\\python_major\\auto_office11')
from PyPDF2 import PdfFileReader,PdfFileWriter

pdf_reader = PdfFileReader("Netease Q2 2019 Earnings Release-Final.pdf")
for page in range(0,pdf_reader.getNumPages(),2):
    pdf_writer = PdfFileWriter()
    pdf_writer.addPage(pdf_reader.getPage(page))
    with open("分割后的PDF文件/Netease Q2 2019 Earnings {}.pdf".format(page + 1), "wb") as out:
        pdf_writer.write(out)
        
pdf_writer = PdfFileWriter()
for page in range(15,0,-2):
    pdf_reader = PdfFileReader("分割后的PDF文件/Netease Q2 2019 Earnings {}.pdf".format(page))
    for page in range(pdf_reader.getNumPages() - 1, -1, -1):
        pdf_writer.addPage(pdf_reader.getPage(page))
    
with open("reordered.pdf", "wb") as out:
    pdf_writer.write(out)

–> 奇数分割页面输出结果为:
在这里插入图片描述
–> 倒序保存页面输出结果(这里进行了合并)为:
在这里插入图片描述

注意事项:

本次的综合应用比较简单,主要即使range的用法,还有里面参数的设置,比如要在生成的奇数文件的名称前不是以0默认计数的,而是采取了 +1 的方式,是因为在之后的倒序过程中,如果存在0的话是没有办法输出0所在位置的元素的,因此这样处理,结果也和文件本身的奇数页面对应。下面举个栗子

下面的代码就是刚刚介绍的按照定的要求生成数值数据(比如偶数位数值输出)

ls_3 = [ i for i in range(0,10,2)]
print(ls_3)

–> 输出结果为:[0, 2, 4, 6, 8]

但是现在我们要获得倒序的[8,6,4,2,0],怎么办呢?直接使用ls_4 = [ i for i in range(10,0,-2)]可不可以呢?

ls_3 = [ i for i in range(10,0,-2)]
print(ls_3)

–> 输出结果为: [10, 8, 6, 4, 2]

可以看出,并没有索引到下表为0的数值,所以记住 range()生成数据是不包含右端的,正确的做法一是和前面综合应用使用的方式一样,要想获得0位置对应的数据,可以在存入数据的时候将数值对应的文件数字 +1,或者第二种做法是不索引到0,而是索引到-1(这里的-1不代表最后一个位置,而是单纯的比0小的数值而已),代码如下:

ls_3 = [ i for i in range(8,-1,-2)]
print(ls_3)

–> 输出结果为:[8, 6, 4, 2, 0]

这样就获得了我们想要的数据

发布了37 篇原创文章 · 获赞 10 · 访问量 4639

猜你喜欢

转载自blog.csdn.net/lys_828/article/details/104110729