Z230
This commit is contained in:
@@ -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.")
|
||||
Reference in New Issue
Block a user