-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathover_crop.py
executable file
·93 lines (73 loc) · 2.37 KB
/
over_crop.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/usr/bin/env python
import getopt, sys
from random import uniform
try:
from pyPdf import PdfFileWriter, PdfFileReader
except ImportError:
print "Can't find pyPdf module, Please install it at first."
sys.exit(1)
try:
from reportlab.pdfgen import canvas
from reportlab.lib.colors import green
except ImportError:
print "Can't find reportlab module, Please install it at first."
sys.exit(1)
rfn = '/tmp/' + str(uniform(1, 100))
output_suffix = "pdf"
scale_ratio = 1.35
def build_watermark(SIZE, shift):
c = canvas.Canvas(rfn, pagesize = SIZE)
c.setFillColor(green)
c.circle(-shift, 0, 2, fill=1)
c.circle(SIZE[0], SIZE[1], 2, fill=1)
c.showPage()
c.save()
def argv_parse(argv):
# get the name of pdf
if len(argv) != 2:
print "./over_crop.py {slide.pdf}"
sys.exit()
[filename, suffix] = argv[1].split('.')
if suffix != "pdf":
print "./over_crop.py {slide.pdf}"
sys.exit()
return filename, suffix
def main():
filename, suffix = argv_parse(sys.argv)
pdf = PdfFileReader(file(filename + "." + suffix, "rb"))
output = PdfFileWriter()
page_num = pdf.getNumPages()
# (lower_x, upper_y)
# v
# +-------------------------------+ <-- (upper_x, upper_y)
# | |
# | |
# | |
# | |
# +-------------------------------+ <-- (upper_x, lower_y)
# ^
# (lower_x, lower_y)
[lower_x, lower_y, upper_x, upper_y] = map(float, pdf.getPage(0)['/MediaBox'])
# scale_ratio = 1.35
# TODO check the ori scal_ratio if greate than 1.35 that don't to do
if (upper_x / upper_y) > scale_ratio:
print 'the ratio of the slide file great than 1.35. don\'t to do anything'
sys.exit()
shift = ((upper_y * scale_ratio) - upper_x) / 2
# shift = (upper_y - (upper_x / scale_ratio)) / 2
build_watermark((upper_x + shift, upper_y), shift)
watermark = PdfFileReader(file(rfn, "rb"))
for i in range(page_num):
page = pdf.getPage(i)
page.mediaBox.lowerLeft = (lower_x - shift, lower_y)
page.mediaBox.lowerRight = (upper_x + shift, lower_y)
# page.mediaBox.lowerLeft = (lower_x, lower_y + shift)
# page.mediaBox.upperLeft = (lower_x, upper_y - shift)
page.mergePage(watermark.getPage(0))
output.addPage(page)
# publick out
outputstream = file(filename + "_kindle." + suffix, "wb")
output.write(outputstream)
outputstream.close()
if __name__ == "__main__":
main()