import sys
from pypdf import PdfReader, PdfWriter
def grid_crop_pdf(filename, num_cols, num_rows, output_filename=None):
reader = PdfReader(filename)
writer = PdfWriter()
for page_number in range(len(reader.pages)):
page = reader.pages[page_number]
mediabox = page.mediabox
width = float(mediabox.width)
height = float(mediabox.height)
cell_width = width / num_cols
cell_height = height / num_rows
for row in range(num_rows):
for col in range(num_cols):
new_page = reader.pages[page_number].clone()
left = cell_width * col
bottom = height - cell_height * (row + 1)
right = left + cell_width
top = bottom + cell_height
# Set crop box
new_page.cropbox.lower_left = (left, bottom)
new_page.cropbox.upper_right = (right, top)
writer.add_page(new_page)
if not output_filename:
output_filename = f"cropped_{num_cols}x{num_rows}_{filename}"
with open(output_filename, "wb") as f:
writer.write(f)
print(f"Created {output_filename}")
if __name__ == "__main__":
# Run example: python script.py input.pdf 3 2
inp_file = sys.argv[1]
cols = int(sys.argv[2])
rows = int(sys.argv[3])
grid_crop_pdf(inp_file, cols, rows)