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

16
app.py
View File

@@ -148,13 +148,16 @@ try:
if operation == "📦 Comprimir PDF":
progress.progress(0.1, "Comprimindo...")
for i, (fname, fobj) in enumerate(files_data.items()):
result_data = engine.compress(fobj["data"], preset=extra_opts["preset"])
result_data, stats = engine.compress_with_stats(fobj["data"], preset=extra_opts["preset"])
orig_mb = fobj["info"]["file_size_mb"]
new_mb = round(len(result_data) / (1024 * 1024), 2)
reduction = round((1 - (new_mb / orig_mb)) * 100, 1) if orig_mb > 0 else 0
results.append((fname.replace(".pdf", f"_comprimido.pdf"), result_data))
progress.progress((i + 1) / len(files_data),
f"{fname}: {orig_mb}MB → {new_mb}MB ({reduction}% redução)")
if stats["reduced"]:
msg = f"{fname}: {orig_mb}MB → {new_mb}MB ({reduction}% redução)"
else:
msg = f"{fname}: já otimizado — {len(result_data)} bytes (sem redução adicional)" if stats["images_replaced"] == 0 else f"{fname}: {orig_mb}MB → {new_mb}MB (compressão não reduziu o tamanho, original preservado)"
progress.progress((i + 1) / len(files_data), msg)
elif operation == "📄 PDF/A → PDF comum":
progress.progress(0.1, "Convertendo PDF/A...")
@@ -174,12 +177,13 @@ try:
if fobj["info"].get("is_pdfa"):
result_data = engine.compress_pdfa(fobj["data"], quality=q)
else:
# Se não for PDF/A, aplica compressão normal
result_data = engine.compress(fobj["data"], preset=extra_opts["preset"])
# Se não for PDF/A, aplica compressão normal com stats
result_data, _ = engine.compress_with_stats(fobj["data"], preset=extra_opts["preset"])
orig_mb = fobj["info"]["file_size_mb"]
new_mb = round(len(result_data) / (1024 * 1024), 2)
results.append((fname.replace(".pdf", f"_otimizado.pdf"), result_data))
progress.progress((i + 1) / len(files_data))
progress.progress((i + 1) / len(files_data),
f"{fname}: {orig_mb}MB → {new_mb}MB")
elif operation == "🔗 Merge (juntar PDFs)":
progress.progress(0.3, "Mesclando PDFs...")