@@ -15,9 +15,9 @@ pip install PyPDF2
15
15
``` Python
16
16
import PyPDF2
17
17
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 ())
21
21
```
22
22
23
23
> ** 提示** :上面代码中使用的PDF文件“test.pdf”以及下面的代码中需要用到的PDF文件,也可以通过下面的百度云盘地址进行获取。链接:https://pan.baidu.com/s/1rQujl5RQn9R7PadB2Z5g_g 提取码: e7b4 。
@@ -36,31 +36,18 @@ pdf2text.py test.pdf
36
36
上面的代码中通过创建` PdfFileReader ` 对象的方式来读取PDF文档,该对象的` getPage ` 方法可以获得PDF文档的指定页并得到一个` PageObject ` 对象,通过` PageObject ` 对象的` rotateClockwise ` 和` rotateCounterClockwise ` 方法可以实现页面的顺时针和逆时针方向旋转,通过` PageObject ` 对象的` addBlankPage ` 方法可以添加一个新的空白页,代码如下所示。
37
37
38
38
``` Python
39
- import PyPDF2
39
+ reader = PyPDF2.PdfReader(' XGBoost.pdf' )
40
+ writer = PyPDF2.PdfWriter()
40
41
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 )
54
45
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)
64
51
```
65
52
66
53
### 加密PDF文件
@@ -70,38 +57,34 @@ with open('resources/XGBoost-modified.pdf', 'wb') as file:
70
57
``` Python
71
58
import PyPDF2
72
59
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
+
78
66
writer.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)
81
70
```
82
71
83
72
### 批量添加水印
84
73
85
74
上面提到的` PageObject ` 对象还有一个名为` mergePage ` 的方法,可以两个PDF页面进行叠加,通过这个操作,我们很容易实现给PDF文件添加水印的功能。例如要给上面的“XGBoost.pdf”文件添加一个水印,我们可以先准备好一个提供水印页面的PDF文件,然后将包含水印的` PageObject ` 读取出来,然后再循环遍历“XGBoost.pdf”文件的每个页,获取到` PageObject ` 对象,然后通过` mergePage ` 方法实现水印页和原始页的合并,代码如下所示。
86
75
87
76
``` 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)
89
85
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)
105
88
```
106
89
107
90
如果愿意,还可以让奇数页和偶数页使用不同的水印,大家可以自己思考下应该怎么做。
0 commit comments