Added PDF rotation filter
This commit is contained in:
parent
c1a2926ce2
commit
1b8185cfd0
|
@ -22,6 +22,8 @@ class Stitcher:
|
||||||
self.dir = os.path.dirname(os.path.abspath(inputBuffer.name))
|
self.dir = os.path.dirname(os.path.abspath(inputBuffer.name))
|
||||||
# Fit complete page width by default
|
# Fit complete page width by default
|
||||||
DEFAULT_FIT = '/FitV'
|
DEFAULT_FIT = '/FitV'
|
||||||
|
# Do not rotate by default
|
||||||
|
DEFAULT_ROTATE = 0
|
||||||
|
|
||||||
# TODO: This is a hack
|
# TODO: This is a hack
|
||||||
os.chdir(self.dir)
|
os.chdir(self.dir)
|
||||||
|
@ -31,6 +33,7 @@ class Stitcher:
|
||||||
html = md.convert(text)
|
html = md.convert(text)
|
||||||
self.attributes = md.Meta
|
self.attributes = md.Meta
|
||||||
self.defaultFit = self._getAttribute('fit', DEFAULT_FIT)
|
self.defaultFit = self._getAttribute('fit', DEFAULT_FIT)
|
||||||
|
self.defaultRotate = self._getAttribute('rotate', DEFAULT_ROTATE)
|
||||||
|
|
||||||
document = html5lib.parseFragment(html, namespaceHTMLElements=False)
|
document = html5lib.parseFragment(html, namespaceHTMLElements=False)
|
||||||
for e in document.iter():
|
for e in document.iter():
|
||||||
|
@ -89,9 +92,10 @@ class Stitcher:
|
||||||
self.currentLevel = 3
|
self.currentLevel = 3
|
||||||
elif(tag =='a'):
|
elif(tag =='a'):
|
||||||
file = element.attrib.get('href')
|
file = element.attrib.get('href')
|
||||||
|
rotate = element.attrib.get('rotate', self.defaultRotate)
|
||||||
fit = element.attrib.get('fit', self.defaultFit)
|
fit = element.attrib.get('fit', self.defaultFit)
|
||||||
b = Bookmark(self.currentPage, element.text, self.currentLevel+1, fit)
|
b = Bookmark(self.currentPage, element.text, self.currentLevel+1, fit)
|
||||||
self.files.append((file, self.currentPage))
|
self.files.append((file, self.currentPage, rotate))
|
||||||
self.currentPage += self._get_pdf_number_of_pages(file)
|
self.currentPage += self._get_pdf_number_of_pages(file)
|
||||||
if b:
|
if b:
|
||||||
self.bookmarks.append(b)
|
self.bookmarks.append(b)
|
||||||
|
@ -107,7 +111,7 @@ class Stitcher:
|
||||||
return (self._existingBookmarkConfig() == 'flatten')
|
return (self._existingBookmarkConfig() == 'flatten')
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Adds the existing bookmarks into the
|
Adds the existing bookmarks into the
|
||||||
self.bookmarks list
|
self.bookmarks list
|
||||||
"""
|
"""
|
||||||
def _add_existing_bookmarks(self):
|
def _add_existing_bookmarks(self):
|
||||||
|
@ -186,14 +190,14 @@ class Stitcher:
|
||||||
"""
|
"""
|
||||||
def _merge(self, output):
|
def _merge(self, output):
|
||||||
writer = PdfFileWriter()
|
writer = PdfFileWriter()
|
||||||
for (inputFile,startPage) in self.files:
|
for (inputFile,startPage,rotate) in self.files:
|
||||||
assert os.path.isfile(inputFile), ERROR_PATH.format(inputFile)
|
assert os.path.isfile(inputFile), ERROR_PATH.format(inputFile)
|
||||||
reader = PdfFileReader(open(inputFile, 'rb'))
|
reader = PdfFileReader(open(inputFile, 'rb'))
|
||||||
# Recursively iterate through the old bookmarks
|
# Recursively iterate through the old bookmarks
|
||||||
self._iterate_old_bookmarks(reader, startPage, reader.getOutlines())
|
self._iterate_old_bookmarks(reader, startPage, reader.getOutlines())
|
||||||
for page in range(1, reader.getNumPages()+1):
|
for page in range(1, reader.getNumPages()+1):
|
||||||
writer.addPage(reader.getPage(page - 1))
|
writer.addPage(reader.getPage(page - 1).rotateClockwise(int(rotate)))
|
||||||
|
|
||||||
writer.write(output)
|
writer.write(output)
|
||||||
output.close()
|
output.close()
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
existing_bookmarks: remove
|
||||||
|
author: Wiki, the Cat
|
||||||
|
subject: A book about adventures of Wiki, the cat.
|
||||||
|
keywords: wiki,potato,jelly
|
||||||
|
# Super Potato Book
|
||||||
|
|
||||||
|
# Volume 1
|
||||||
|
|
||||||
|
[Part 1](1.pdf)
|
||||||
|
|
||||||
|
# Volume 2
|
||||||
|
|
||||||
|
[Part 2](2.pdf){: rotate="90"}
|
||||||
|
|
||||||
|
# Volume 3
|
||||||
|
|
||||||
|
[Part 3](1.pdf){: rotate="180"}
|
Loading…
Reference in New Issue