1- from PyPDF2 import PdfFileReader , PdfFileWriter
2- import sys
3- import os
4- import fitz
5-
6- class PDF :
7- def __init__ (self ):
8- self .infn = []
9- self .params = ''
10- self .message = ''
11-
12- def pdf_info (self ):
13- return [ 'ID:%d, 页数:%d, 宽×高:%d×%d ' % (i + 1 , p .getNumPages (), p .getPage (0 ).mediaBox .upperRight [0 ], p .getPage (0 ).mediaBox .upperRight [1 ]) for i , p in enumerate ( [ PdfFileReader ( open (p , 'rb' ) ) for p in self .infn ] ) ]
14-
15-
16- def split_pdf_each (self ):
17- for infn in self .infn :
18- try :
19- pdf_name = infn .split ('\\ ' )[- 1 ];
20- dir_ = infn .replace (pdf_name , pdf_name [:- 4 ] + '\\ ' )
21- if not os .path .exists (dir_ ):
22- os .mkdir (dir_ )
23- pdf_input = PdfFileReader (open (infn , 'rb' ))
24- pages = pdf_input .getNumPages ()
25- self .message = '正在拆分...'
26- for i in range (pages ):
27- pdf_output = PdfFileWriter ()
28- pdf_output .addPage (pdf_input .getPage (i ))
29- pdf_output .write (open (dir_ + pdf_name [:- 4 ] + '-' + str (i + 1 ) + '.pdf' , 'wb' ))
30- self .message = pdf_name + ': ' + str (i ) + '/' + str (pages )
31- except :
32- self .message = '出错了,请检查输入格式是否正确'
33- self .message = '完成'
34-
35- def split_pdf_parts (self ):
36- for infn in self .infn :
37- try :
38- pdf_input = PdfFileReader (open (infn , 'rb' ))
39- self .message = '正在拆分...'
40- for part in self .params :
41- pdf_output = PdfFileWriter ()
42- for i in range (part [0 ] - 1 , part [1 ]):
43- pdf_output .addPage (pdf_input .getPage (i ));
44- pdf_output .write (open (infn [:- 4 ] + '-' + str (part [0 ]) + '-' + str (part [1 ]) + '.pdf' , 'wb' ))
45- self .message = '第%d部分已拆分' % (self .params .index (part ) + 1 )
46- except :
47- self .message = '出错了,请检查输入格式是否正确'
48- self .message = '完成'
49-
50- def merge_pdf (self ):
51- try :
52- pdf_output = PdfFileWriter ()
53- self .message = '正在合并...'
54- for infn in self .infn :
55- self .message = infn
56- pdf_name = infn .split ('\\ ' )[- 1 ];
57- pdf_input = PdfFileReader (open (infn , 'rb' ))
58- pages = pdf_input .getNumPages ()
59- for i in range (pages ):
60- pdf_output .addPage (pdf_input .getPage (i ))
61- self .message = pdf_name + ': ' + str (i ) + '/' + str (pages )
62- pdf_output .write (open (self .params , 'wb' ))
63- self .message = '合并完成'
64- except :
65- self .message = '出错了,请检查输入格式是否正确'
66-
67- def cut_pdf (self ):
68- try :
69- left , right , lower , upper , option , isTest = self .params ;
70- self .message = '正在剪切'
71- pdf_name = self .infn [0 ].split ('\\ ' )[- 1 ];
72- pdf_input = PdfFileReader (open (self .infn [0 ], 'rb' ));
73- pdf_output = PdfFileWriter ();
74- pages = pdf_input .getNumPages ()
75- if isTest == 1 :
76- pages = min (10 * isTest , pages )
77- for i in range (pages ):
78- page = pdf_input .getPage (i );
79- if (option == 'all' ) or (option == 'odd' and i % 2 == 0 ) or (option == 'even' and (i + 1 )% 2 == 0 ):
80- page .mediaBox .upperLeft = (left , page .mediaBox .upperLeft [1 ] - upper )
81- page .mediaBox .upperRight = (page .mediaBox .upperRight [0 ] - right , page .mediaBox .upperRight [1 ] - upper )
82- page .mediaBox .lowerLeft = (left , lower )
83- page .mediaBox .lowerRight = (page .mediaBox .lowerRight [0 ] - right , lower )
84- pdf_output .addPage (page );
85- self .message = pdf_name + ': ' + str (i ) + '/' + str (pages )
86- pdf_output .write (open (self .infn [0 ][:- 4 ] + '-cut.pdf' , 'wb' ));
87- self .message = '剪切完成'
88- except :
89- self .message = '出错了,请检查输入格式是否正确'
90-
91- def rotate_pdf (self ):
92- try :
93- pdf_name = self .infn [0 ].split ('\\ ' )[- 1 ];
94- rotation , isTest = self .params
95- self .message = '正在旋转'
96- pdf_input = PdfFileReader (open (self .infn [0 ], 'rb' ));
97- pdf_output = PdfFileWriter ();
98- pages = isTest or pdf_input .getNumPages ();
99- for i in range (pages ):
100- page = pdf_input .getPage (i );
101- page .rotateClockwise (rotation );
102- pdf_output .addPage (page );
103- self .message = pdf_name + ': ' + str (i ) + '/' + str (pages )
104- pdf_output .write (open (self .infn [0 ][:- 4 ] + '-rotate.pdf' , 'wb' ));
105- self .message = '完成旋转'
106- except :
107- self .message = '出错了,请检查输入格式是否正确(旋转角度为90的倍数)'
108-
109- def add_watermark (self ):
110- self .message = '正在添加页码'
111- water_pdf = PdfFileReader (open ('page-number.pdf' , 'rb' ));
112- water_pages = water_pdf .getNumPages ()
113- for infn in self .infn :
114- try :
115- pdf_name = infn .split ('\\ ' )[- 1 ];
116- pdf_input = PdfFileReader (open (infn , 'rb' ));
117- pages = min (pdf_input .getNumPages (), water_pages );
118- pdf_output = PdfFileWriter ();
119- for i in range (pages ):
120- page = pdf_input .getPage (i );
121- water_page = water_pdf .getPage (i );
122- page .mergePage (water_page );
123- pdf_output .addPage (page );
124- self .message = pdf_name + ': ' + str (i ) + '/' + str (pages )
125- pdf_output .write (open (infn [:- 4 ] + '-number2.pdf' , 'wb' ));
126- except :
127- self .message = '出错了,请检查输入格式是否正确(page-number.pdf文件要求和程序在同一目录)'
128- self .message = '完成' ;
129-
130- def convert_pdf2_image (self ):
131- self .message = '正在转换,所需时间较长,请稍等'
132- zoom , type_ = self .params
133- for infn in self .infn :
134- try :
135- pdf_name = infn .split ('\\ ' )[- 1 ];
136- dir_ = infn .replace (pdf_name , pdf_name [:- 4 ] + '\\ ' )
137- if not os .path .exists (dir_ ):
138- os .mkdir (dir_ )
139- doc = fitz .open (infn )
140- for pg in range (doc .pageCount ):
141- page = doc [pg ]
142- rotate = int (0 )
143- trans = fitz .Matrix (zoom , zoom ).preRotate (rotate )
144- pm = page .getPixmap (matrix = trans , alpha = False )
145- pm .writePNG ( dir_ + pdf_name + '-' + str (pg ) + '.' + type_ )
146- self .message = pdf_name + ': ' + str (pg + 1 ) + '/' + str (doc .pageCount ) ;
147- except :
148- self .message = '出错了,请检查输入格式是否正确'
1+ from PyPDF2 import PdfFileReader , PdfFileWriter
2+ import sys
3+ import os
4+ import fitz
5+
6+ class PDF :
7+ def __init__ (self ):
8+ self .infn = []
9+ self .params = ''
10+ self .message = ''
11+
12+ def pdf_info (self ):
13+ return [ 'ID:%d, 页数:%d, 宽×高:%d×%d ' % (i + 1 , p .getNumPages (), p .getPage (0 ).mediaBox .upperRight [0 ], p .getPage (0 ).mediaBox .upperRight [1 ]) for i , p in enumerate ( [ PdfFileReader ( open (p , 'rb' ) ) for p in self .infn ] ) ]
14+
15+
16+ def split_pdf_each (self ):
17+ for infn in self .infn :
18+ try :
19+ pdf_name = infn .split ('\\ ' )[- 1 ];
20+ dir_ = infn .replace (pdf_name , pdf_name [:- 4 ] + '\\ ' )
21+ if not os .path .exists (dir_ ):
22+ os .mkdir (dir_ )
23+ pdf_input = PdfFileReader (open (infn , 'rb' ))
24+ pages = pdf_input .getNumPages ()
25+ self .message = '正在拆分...'
26+ for i in range (pages ):
27+ pdf_output = PdfFileWriter ()
28+ pdf_output .addPage (pdf_input .getPage (i ))
29+ pdf_output .write (open (dir_ + pdf_name [:- 4 ] + '-' + str (i + 1 ) + '.pdf' , 'wb' ))
30+ self .message = pdf_name + ': ' + str (i ) + '/' + str (pages )
31+ except :
32+ self .message = '出错了,请检查输入格式是否正确'
33+ self .message = '完成'
34+
35+ def split_pdf_parts (self ):
36+ for infn in self .infn :
37+ try :
38+ pdf_input = PdfFileReader (open (infn , 'rb' ))
39+ self .message = '正在拆分...'
40+ for part in self .params :
41+ pdf_output = PdfFileWriter ()
42+ for i in range (part [0 ] - 1 , part [1 ]):
43+ pdf_output .addPage (pdf_input .getPage (i ));
44+ pdf_output .write (open (infn [:- 4 ] + '-' + str (part [0 ]) + '-' + str (part [1 ]) + '.pdf' , 'wb' ))
45+ self .message = '第%d部分已拆分' % (self .params .index (part ) + 1 )
46+ except :
47+ self .message = '出错了,请检查输入格式是否正确'
48+ self .message = '完成'
49+
50+ def merge_pdf (self ):
51+ try :
52+ pdf_output = PdfFileWriter ()
53+ self .message = '正在合并...'
54+ for infn in self .infn :
55+ self .message = infn
56+ pdf_name = infn .split ('\\ ' )[- 1 ];
57+ pdf_input = PdfFileReader (open (infn , 'rb' ))
58+ pages = pdf_input .getNumPages ()
59+ for i in range (pages ):
60+ pdf_output .addPage (pdf_input .getPage (i ))
61+ self .message = pdf_name + ': ' + str (i ) + '/' + str (pages )
62+ pdf_output .write (open (self .params , 'wb' ))
63+ self .message = '合并完成,合并文件位于第一个文件所在地 '
64+ except :
65+ self .message = '出错了,请检查输入格式是否正确'
66+
67+ def cut_pdf (self ):
68+ try :
69+ left , right , lower , upper , option , isTest = self .params ;
70+ self .message = '正在剪切'
71+ pdf_name = self .infn [0 ].split ('\\ ' )[- 1 ];
72+ pdf_input = PdfFileReader (open (self .infn [0 ], 'rb' ));
73+ pdf_output = PdfFileWriter ();
74+ pages = pdf_input .getNumPages ()
75+ if isTest == 1 :
76+ pages = min (10 * isTest , pages )
77+ for i in range (pages ):
78+ page = pdf_input .getPage (i );
79+ if (option == 'all' ) or (option == 'odd' and i % 2 == 0 ) or (option == 'even' and (i + 1 )% 2 == 0 ):
80+ page .mediaBox .upperLeft = (left , page .mediaBox .upperLeft [1 ] - upper )
81+ page .mediaBox .upperRight = (page .mediaBox .upperRight [0 ] - right , page .mediaBox .upperRight [1 ] - upper )
82+ page .mediaBox .lowerLeft = (left , lower )
83+ page .mediaBox .lowerRight = (page .mediaBox .lowerRight [0 ] - right , lower )
84+ pdf_output .addPage (page );
85+ self .message = pdf_name + ': ' + str (i ) + '/' + str (pages )
86+ pdf_output .write (open (self .infn [0 ][:- 4 ] + '-cut.pdf' , 'wb' ));
87+ self .message = '剪切完成'
88+ except :
89+ self .message = '出错了,请检查输入格式是否正确'
90+
91+ def rotate_pdf (self ):
92+ try :
93+ pdf_name = self .infn [0 ].split ('\\ ' )[- 1 ];
94+ rotation , isTest = self .params
95+ self .message = '正在旋转'
96+ pdf_input = PdfFileReader (open (self .infn [0 ], 'rb' ));
97+ pdf_output = PdfFileWriter ();
98+ pages = isTest or pdf_input .getNumPages ();
99+ for i in range (pages ):
100+ page = pdf_input .getPage (i );
101+ page .rotateClockwise (rotation );
102+ pdf_output .addPage (page );
103+ self .message = pdf_name + ': ' + str (i ) + '/' + str (pages )
104+ pdf_output .write (open (self .infn [0 ][:- 4 ] + '-rotate.pdf' , 'wb' ));
105+ self .message = '完成旋转'
106+ except :
107+ self .message = '出错了,请检查输入格式是否正确(旋转角度为90的倍数)'
108+
109+ def add_watermark (self ):
110+ self .message = '正在添加页码'
111+ water_pdf = PdfFileReader (open ('page-number.pdf' , 'rb' ));
112+ water_pages = water_pdf .getNumPages ()
113+ for infn in self .infn :
114+ try :
115+ pdf_name = infn .split ('\\ ' )[- 1 ];
116+ pdf_input = PdfFileReader (open (infn , 'rb' ));
117+ pages = min (pdf_input .getNumPages (), water_pages );
118+ pdf_output = PdfFileWriter ();
119+ for i in range (pages ):
120+ page = pdf_input .getPage (i );
121+ water_page = water_pdf .getPage (i );
122+ page .mergePage (water_page );
123+ pdf_output .addPage (page );
124+ self .message = pdf_name + ': ' + str (i ) + '/' + str (pages )
125+ pdf_output .write (open (infn [:- 4 ] + '-number2.pdf' , 'wb' ));
126+ except :
127+ self .message = '出错了,请检查输入格式是否正确(page-number.pdf文件要求和程序在同一目录)'
128+ self .message = '完成' ;
129+
130+ def convert_pdf2_image (self ):
131+ self .message = '正在转换,所需时间较长,请稍等'
132+ zoom , type_ = self .params
133+ for infn in self .infn :
134+ try :
135+ pdf_name = infn .split ('\\ ' )[- 1 ];
136+ dir_ = infn .replace (pdf_name , pdf_name [:- 4 ] + '\\ ' )
137+ if not os .path .exists (dir_ ):
138+ os .mkdir (dir_ )
139+ doc = fitz .open (infn )
140+ for pg in range (doc .pageCount ):
141+ page = doc [pg ]
142+ rotate = int (0 )
143+ trans = fitz .Matrix (zoom , zoom ).preRotate (rotate )
144+ pm = page .getPixmap (matrix = trans , alpha = False )
145+ pm .writePNG ( dir_ + pdf_name + '-' + str (pg ) + '.' + type_ )
146+ self .message = pdf_name + ': ' + str (pg + 1 ) + '/' + str (doc .pageCount ) ;
147+ except :
148+ self .message = '出错了,请检查输入格式是否正确'
149149 self .message = '完成' ;
0 commit comments