Skip to content

Commit eaf1c6b

Browse files
增加拖入文件功能
1 parent 08c9813 commit eaf1c6b

2 files changed

Lines changed: 268 additions & 246 deletions

File tree

PDF.py

Lines changed: 148 additions & 148 deletions
Original file line numberDiff line numberDiff line change
@@ -1,149 +1,149 @@
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

Comments
 (0)