66 lines
2.7 KiB
Python
66 lines
2.7 KiB
Python
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) |