import fitz # PyMuPDF import os def compress_and_grayscale_pdf(input_path, quality=60, dpi=150): """ input_path: Cesta k souboru quality: Kvalita JPG komprese (1-100). 60 je dobrý kompromis pro čitelnost a velikost. dpi: Rozlišení. 150 DPI stačí pro čtení na monitoru/běžný tisk. Pro menší velikost zkuste 96 nebo 72. """ # Kontrola existence souboru if not os.path.exists(input_path): print(f"Chyba: Soubor nebyl nalezen: {input_path}") return try: # Otevření zdrojového PDF doc = fitz.open(input_path) new_doc = fitz.open() # Vytvoření nového prázdného PDF print(f"Zpracovávám: {os.path.basename(input_path)}") print(f"Původní velikost: {os.path.getsize(input_path) / 1024:.2f} KB") for page_num, page in enumerate(doc): # Nastavení matice pro změnu rozlišení (DPI) # Standardní PDF má 72 DPI. Zoom = požadované DPI / 72 zoom = dpi / 72 matrix = fitz.Matrix(zoom, zoom) # 1. Renderování stránky do obrázku (Pixmap) # colorspace=fitz.csGRAY zajistí převod do černobílé (Grayscale) pix = page.get_pixmap(matrix=matrix, colorspace=fitz.csGRAY) # 2. Vytvoření nové stránky v cílovém dokumentu se stejnými rozměry # Používáme původní rozměry stránky (rect), aby se PDF "nezmenšilo" vizuálně na monitoru new_page = new_doc.new_page(width=page.rect.width, height=page.rect.height) # 3. Vložení zmenšeného a odbarveného obrázku zpět # stream=pix.tobytes("jpg") zajistí silnou kompresi new_page.insert_image(page.rect, stream=pix.tobytes("jpg", jpg_quality=quality)) # Vytvoření názvu výstupního souboru output_path = input_path.replace(".pdf", "_bw_small.pdf") # Uložení s garbage collection (odstranění nepotřebných dat) a deflací new_doc.save(output_path, garbage=4, deflate=True) new_doc.close() doc.close() # Výpis výsledku new_size = os.path.getsize(output_path) print(f"Hotovo. Uloženo jako: {output_path}") print(f"Nová velikost: {new_size / 1024:.2f} KB") except Exception as e: print(f"Došlo k chybě: {e}") # --- SPUŠTĚNÍ --- # Použití raw stringu (r''), aby Python neinterpretoval zpětná lomítka jako escape znaky file_path = r'u:\Dropbox\Ordinace\Dokumentace_ke_zpracování\AdobeMakeSmaller\90df6f84-72c8-40b8-8993-ce7e244b0cea.pdf' # Můžete experimentovat s parametry. # Pokud bude text nečitelný, zvyšte dpi na 200. Pokud je soubor moc velký, snižte quality na 40. compress_and_grayscale_pdf(file_path, quality=50, dpi=120)