from PyPDF2 import PdfReader, PdfWriter # A4 dimensions in points (1mm = 2.83465 points) A4_WIDTH = 210 * 2.83465 # ≈ 595.276 pts (width) A4_HEIGHT = 297 * 2.83465 # ≈ 841.89 pts (height) def fit_to_a4(input_pdf_path, output_pdf_path): reader = PdfReader(input_pdf_path) writer = PdfWriter() for page in reader.pages: # Get original page dimensions orig_width = float(page.mediabox.width) orig_height = float(page.mediabox.height) # Calculate scaling factor to fit A4 (preserve aspect ratio) scale = min(A4_WIDTH / orig_width, A4_HEIGHT / orig_height) # Scale the page content page.scale_by(scale) # Calculate offsets to center on A4 new_width = orig_width * scale new_height = orig_height * scale x_offset = (A4_WIDTH - new_width) / 2 y_offset = (A4_HEIGHT - new_height) / 2 # Set A4 mediabox and shift content page.mediabox.lower_left = (x_offset, y_offset) page.mediabox.upper_right = (x_offset + new_width, y_offset + new_height) writer.add_page(page) # Save the output PDF with open(output_pdf_path, "wb") as out_file: writer.write(out_file) # Example usage fit_to_a4(r"z:\Dropbox\Ordinace\Dokumentace_ke_zpracování\untitled.pdf", r"z:\Dropbox\Ordinace\Dokumentace_ke_zpracování\output_a4.pdf") print("PDF adjusted to A4 portrait successfully!")