Split each PDF page in two?
You can use a Python library called PyPDF. This function will split double pages no matter what the page orientation is:
import copy
import math
import pyPdf
def split_pages(src, dst):
src_f = file(src, 'r+b')
dst_f = file(dst, 'w+b')
input = pyPdf.PdfFileReader(src_f)
output = pyPdf.PdfFileWriter()
for i in range(input.getNumPages()):
p = input.getPage(i)
q = copy.copy(p)
q.mediaBox = copy.copy(p.mediaBox)
x1, x2 = p.mediaBox.lowerLeft
x3, x4 = p.mediaBox.upperRight
x1, x2 = math.floor(x1), math.floor(x2)
x3, x4 = math.floor(x3), math.floor(x4)
x5, x6 = math.floor(x3/2), math.floor(x4/2)
if x3 > x4:
# horizontal
p.mediaBox.upperRight = (x5, x4)
p.mediaBox.lowerLeft = (x1, x2)
q.mediaBox.upperRight = (x3, x4)
q.mediaBox.lowerLeft = (x5, x2)
else:
# vertical
p.mediaBox.upperRight = (x3, x4)
p.mediaBox.lowerLeft = (x1, x6)
q.mediaBox.upperRight = (x3, x6)
q.mediaBox.lowerLeft = (x1, x2)
output.addPage(p)
output.addPage(q)
output.write(dst_f)
src_f.close()
dst_f.close()
PDF Scissors allowed me to bulk split (crop) all pages in a PDF.
mutool
works brillantly for this. The example below will chop each page of input.pdf
into 3 horizontal and 8 vertical parts (thus creating 24 pages of output for each 1 of input):
mutool poster -x 3 -y 8 input.pdf output.pdf
To install mutool
, just install mupdf
, which is probably packaged with most GNU/Linux distributions.
(Credits to marttt.)
On debian based linux systems like ubuntu, you can install it using
sudo apt install mupdf
sudo apt install mupdf-tools