fix: report un-optimizable images as a warning, not a traceback

The optimizer is best-effort: any image it cannot process is left
unchanged in the output, which remains valid. Previously, an extraction
failure (e.g. an exotic colorspace pikepdf cannot transcode) was logged
with log.exception, printing a full traceback at ERROR level that alarmed
users even though nothing was wrong with the output (issue #846).

Trap such failures with a concise warning that the image was left
unchanged and the output is still valid, and demote the traceback to
debug verbosity for diagnosis.
This commit is contained in:
James R. Barlow
2026-06-10 13:38:05 -07:00
parent 7e42d3c771
commit 58642d8411
3 changed files with 53 additions and 14 deletions
+9 -2
View File
@@ -354,9 +354,16 @@ def extract_images(
pdf=pdf, root=root, image=image, xref=xref, options=options
)
except Exception: # pylint: disable=broad-except
log.exception(
f"xref {xref}: While extracting this image, an error occurred"
# Optimization is best-effort: an image we cannot process is simply
# left unchanged in the output, which remains valid. Report this as
# a concise warning rather than an alarming traceback (issue #846);
# the full detail is still available at debug verbosity.
log.warning(
f"xref {xref}: this image could not be processed by the "
"optimizer and was left unchanged. The output file is still "
"valid."
)
log.debug(f"xref {xref}: image optimization error detail", exc_info=True)
errors += 1
else:
if result: