z230
This commit is contained in:
66
MakeSmallerPDF/2 MakeSmaller.py
Normal file
66
MakeSmallerPDF/2 MakeSmaller.py
Normal file
@@ -0,0 +1,66 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user