import pikepdf
input_pdf = "File.pdf"
pdf = pikepdf.open(input_pdf)
a3_pdf = pikepdf.Pdf.new()
a4_pdf = pikepdf.Pdf.new()
other_pdf = pikepdf.Pdf.new()
# Standard sizes in points
A3 = (841.89, 1190.55)
A4 = (595.28, 841.89)
tol = 5 # increased tolerance
for i, page in enumerate(pdf.pages, start=1):
media = page.MediaBox
# Properly check if CropBox exists
try:
crop = page.CropBox
except AttributeError:
crop = media
# Alternative approach using hasattr:
# crop = page.CropBox if hasattr(page, 'CropBox') else media
width = float(crop[2]) - float(crop[0])
height = float(crop[3]) - float(crop[1])
dims = sorted([width, height]) # sort in case of rotation
if abs(dims[0] - A3[0]) < tol and abs(dims[1] - A3[1]) < tol:
a3_pdf.pages.append(page)
print(f"Page {i} -> A3")
elif abs(dims[0] - A4[0]) < tol and abs(dims[1] - A4[1]) < tol:
a4_pdf.pages.append(page)
print(f"Page {i} -> A4")
else:
other_pdf.pages.append(page)
print(f"Page {i} -> OTHER ({width:.2f} x {height:.2f})")
# Only save PDFs that contain pages
if len(a3_pdf.pages) > 0:
a3_pdf.save("A3_pages.pdf", linearize=True)
print(f"✅ A3_pages.pdf created with {len(a3_pdf.pages)} pages")
else:
print("⚠️ No A3 pages found - A3_pages.pdf not created")
if len(a4_pdf.pages) > 0:
a4_pdf.save("A4_pages.pdf", linearize=True)
print(f"✅ A4_pages.pdf created with {len(a4_pdf.pages)} pages")
else:
print("⚠️ No A4 pages found - A4_pages.pdf not created")
if len(other_pdf.pages) > 0:
other_pdf.save("Other_pages.pdf", linearize=True)
print(f"✅ Other_pages.pdf created with {len(other_pdf.pages)} pages")
else:
print("⚠️ No other-sized pages found - Other_pages.pdf not created")
print("Done ✅ Processing completed successfully.")