@@ -15,9 +15,9 @@ pip install PyPDF2
1515``` Python
1616import PyPDF2
1717
18- reader = PyPDF2.PdfFileReader (' test.pdf' )
19- page = reader.getPage( 0 )
20- print (page.extractText ())
18+ reader = PyPDF2.PdfReader (' test.pdf' )
19+ for page in reader.pages:
20+ print (page.extract_text ())
2121```
2222
2323> ** 提示** :上面代码中使用的PDF文件“test.pdf”以及下面的代码中需要用到的PDF文件,也可以通过下面的百度云盘地址进行获取。链接:https://pan.baidu.com/s/1rQujl5RQn9R7PadB2Z5g_g 提取码: e7b4 。
@@ -36,31 +36,18 @@ pdf2text.py test.pdf
3636上面的代码中通过创建` PdfFileReader ` 对象的方式来读取PDF文档,该对象的` getPage ` 方法可以获得PDF文档的指定页并得到一个` PageObject ` 对象,通过` PageObject ` 对象的` rotateClockwise ` 和` rotateCounterClockwise ` 方法可以实现页面的顺时针和逆时针方向旋转,通过` PageObject ` 对象的` addBlankPage ` 方法可以添加一个新的空白页,代码如下所示。
3737
3838``` Python
39- import PyPDF2
39+ reader = PyPDF2.PdfReader(' XGBoost.pdf' )
40+ writer = PyPDF2.PdfWriter()
4041
41- from PyPDF2.pdf import PageObject
42-
43- # 创建一个读PDF文件的Reader对象
44- reader = PyPDF2.PdfFileReader(' resources/XGBoost.pdf' )
45- # 创建一个写PDF文件的Writer对象
46- writer = PyPDF2.PdfFileWriter()
47- # 对PDF文件所有页进行循环遍历
48- for page_num in range (reader.numPages):
49- # 获取指定页码的Page对象
50- current_page = reader.getPage(page_num) # type: PageObject
51- if page_num % 2 == 0 :
52- # 奇数页顺时针旋转90度
53- current_page.rotateClockwise(90 )
42+ for no, page in enumerate (reader.pages):
43+ if no % 2 == 0 :
44+ new_page = page.rotate(- 90 )
5445 else :
55- # 偶数页反时针旋转90度
56- current_page.rotateCounterClockwise(90 )
57- writer.addPage(current_page)
58- # 最后添加一个空白页并旋转90度
59- page = writer.addBlankPage() # type: PageObject
60- page.rotateClockwise(90 )
61- # 通过Writer对象的write方法将PDF写入文件
62- with open (' resources/XGBoost-modified.pdf' , ' wb' ) as file :
63- writer.write(file )
46+ new_page = page.rotate(90 )
47+ writer.add_page(new_page)
48+
49+ with open (' temp.pdf' , ' wb' ) as file_obj:
50+ writer.write(file_obj)
6451```
6552
6653### 加密PDF文件
@@ -70,38 +57,34 @@ with open('resources/XGBoost-modified.pdf', 'wb') as file:
7057``` Python
7158import PyPDF2
7259
73- reader = PyPDF2.PdfFileReader(' resources/XGBoost.pdf' )
74- writer = PyPDF2.PdfFileWriter()
75- for page_num in range (reader.numPages):
76- writer.addPage(reader.getPage(page_num))
77- # 通过encrypt方法加密PDF文件,方法的参数就是设置的密码
60+ reader = PyPDF2.PdfReader(' XGBoost.pdf' )
61+ writer = PyPDF2.PdfWriter()
62+
63+ for page in reader.pages:
64+ writer.add_page(page)
65+
7866writer.encrypt(' foobared' )
79- with open (' resources/XGBoost-encrypted.pdf' , ' wb' ) as file :
80- writer.write(file )
67+
68+ with open (' temp.pdf' , ' wb' ) as file_obj:
69+ writer.write(file_obj)
8170```
8271
8372### 批量添加水印
8473
8574上面提到的` PageObject ` 对象还有一个名为` mergePage ` 的方法,可以两个PDF页面进行叠加,通过这个操作,我们很容易实现给PDF文件添加水印的功能。例如要给上面的“XGBoost.pdf”文件添加一个水印,我们可以先准备好一个提供水印页面的PDF文件,然后将包含水印的` PageObject ` 读取出来,然后再循环遍历“XGBoost.pdf”文件的每个页,获取到` PageObject ` 对象,然后通过` mergePage ` 方法实现水印页和原始页的合并,代码如下所示。
8675
8776``` Python
88- import PyPDF2
77+ reader1 = PyPDF2.PdfReader(' XGBoost.pdf' )
78+ reader2 = PyPDF2.PdfReader(' watermark.pdf' )
79+ writer = PyPDF2.PdfWriter()
80+ watermark_page = reader2.pages[0 ]
81+
82+ for page in reader1.pages:
83+ page.merge_page(watermark_page)
84+ writer.add_page(page)
8985
90- from PyPDF2.pdf import PageObject
91-
92- reader1 = PyPDF2.PdfFileReader(' resources/XGBoost.pdf' )
93- reader2 = PyPDF2.PdfFileReader(' resources/watermark.pdf' )
94- writer = PyPDF2.PdfFileWriter()
95- # 获取水印页
96- watermark_page = reader2.getPage(0 )
97- for page_num in range (reader1.numPages):
98- current_page = reader1.getPage(page_num) # type: PageObject
99- current_page.mergePage(watermark_page)
100- # 将原始页和水印页进行合并
101- writer.addPage(current_page)
102- # 将PDF写入文件
103- with open (' resources/XGBoost-watermarked.pdf' , ' wb' ) as file :
104- writer.write(file )
86+ with open (' temp.pdf' , ' wb' ) as file_obj:
87+ writer.write(file_obj)
10588```
10689
10790如果愿意,还可以让奇数页和偶数页使用不同的水印,大家可以自己思考下应该怎么做。
0 commit comments