This commit is contained in:
2026-04-27 11:00:40 +02:00
parent d4825553a9
commit 90bd0ecdf5
11 changed files with 1002 additions and 130 deletions
@@ -0,0 +1,60 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Compress a PDF into multiple variants at different DPI / JPEG quality settings.
Uses PyMuPDF (fitz) — renders each page as JPEG image, saves back as PDF.
"""
import sys
import fitz # PyMuPDF
from pathlib import Path
INPUT = Path(r"u:\Medevio\50 Různé testy\MinimizeOptimizePDF\afd1823b-8277-44a2-84e1-db89a0ccd134.pdf")
OUT_DIR = INPUT.parent
VARIANTS = [
# (label, dpi, jpeg_quality)
("300dpi_q90", 300, 90),
("200dpi_q85", 200, 85),
("150dpi_q80", 150, 80),
("120dpi_q75", 120, 75),
("96dpi_q70", 96, 70),
("72dpi_q60", 72, 60),
]
src = fitz.open(INPUT)
original_size = INPUT.stat().st_size
print(f"Originál: {INPUT.name} ({original_size / 1024:.0f} KB)\n")
print(f"{'Varianta':<20} {'DPI':>5} {'Kvalita':>8} {'Velikost':>12} {'Úspora':>8}")
print("-" * 58)
for label, dpi, quality in VARIANTS:
out_path = OUT_DIR / f"{INPUT.stem}_{label}.pdf"
zoom = dpi / 72.0
mat = fitz.Matrix(zoom, zoom)
out_doc = fitz.open()
for page in src:
pix = page.get_pixmap(matrix=mat, colorspace=fitz.csRGB)
img_bytes = pix.tobytes("jpeg", jpg_quality=quality)
# Create a new PDF page with the same physical dimensions
img_doc = fitz.open("pdf", fitz.open("jpeg", img_bytes).convert_to_pdf())
# Scale page back to original size
rect = page.rect
new_page = out_doc.new_page(width=rect.width, height=rect.height)
new_page.show_pdf_page(new_page.rect, img_doc, 0)
out_doc.save(out_path, deflate=True, garbage=4)
out_doc.close()
size = out_path.stat().st_size
size_kb = round(size / 1024)
final_path = OUT_DIR / f"{INPUT.stem}_{label} ({size_kb} kB).pdf"
out_path.rename(final_path)
saving = (1 - size / original_size) * 100
print(f"{label:<20} {dpi:>5} {quality:>8} {size_kb:>9} kB {saving:>7.0f}%")
src.close()
print("\nHotovo.")