fix: compressão real p/ stream DCTDecode + auth c/ chave vazia

- Substitui xobj._data por page.images[].replace() em compress.py e pdfa.py
- Adiciona compress_with_stats() com feedback honesto na UI
- Trata PDFTOOLKIT_API_KEY vazia como modo dev (auth desabilitado)
- Atualiza engine.py e app.py para exibir redução real ou 'já otimizado'
This commit is contained in:
CM Consultor
2026-08-09 05:01:16 +00:00
parent 4496e9cb55
commit e97adca143
5 changed files with 239 additions and 111 deletions

View File

@@ -9,7 +9,7 @@ import io
from typing import List, Tuple
from .validators import validate_pdf, assert_safe_filename
from .compress import compress_pdf
from .compress import compress_pdf, compress_pdf_with_stats
from .pdfa import detect_pdfa, strip_pdfa, compress_pdfa
from .operations import merge_pdfs, split_pdf, extract_pages, rotate_pages
from .operations import extract_text, extract_images, preview_pages
@@ -38,8 +38,18 @@ class PDFEngine:
ou que não possuem imagens adequadas para reamostragem. Nesse caso,
preservamos o original em vez de entregar um arquivo maior.
"""
result = compress_pdf(data, preset=preset)
return result if len(result) < len(data) else data
result, stats = compress_pdf_with_stats(data, preset=preset)
if stats["reduced"]:
return result
return data
@staticmethod
def compress_with_stats(data: bytes, preset: str = "ebook") -> Tuple[bytes, dict]:
"""Comprime e retorna (bytes, estatísticas) para feedback na UI."""
result, stats = compress_pdf_with_stats(data, preset=preset)
if stats["reduced"]:
return result, stats
return data, stats
@staticmethod
def pdfa_to_regular(data: bytes) -> bytes: