diff --git a/src/ocrmypdf/_validation.py b/src/ocrmypdf/_validation.py index fe15a84e..b9df4b12 100644 --- a/src/ocrmypdf/_validation.py +++ b/src/ocrmypdf/_validation.py @@ -418,6 +418,20 @@ def report_output_file_size(options, input_file, output_file): f"The argument --{arg.replace('_', '-')} was issued, causing transcoding." ) + if options.optimize == 0: + reasons.append("Optimization was disabled.") + else: + image_optimizers = { + 'jbig2': jbig2enc.available(), + 'pngquant': pngquant.available(), + } + for name, available in image_optimizers.items(): + if not available: + reasons.append( + f"The optional dependency '{name}' was not found, so some image " + f"optimizations could not be attempted." + ) + if reasons: explanation = "Possible reasons for this include:\n" + '\n'.join(reasons) + "\n" else: diff --git a/tests/test_validation.py b/tests/test_validation.py index 7d70f367..1c9bc1bc 100644 --- a/tests/test_validation.py +++ b/tests/test_validation.py @@ -117,11 +117,23 @@ def test_report_file_size(tmp_path, caplog): opts = make_opts() vd.report_output_file_size(opts, in_, out) assert caplog.text == '' + caplog.clear() os.truncate(in_, 25001) os.truncate(out, 50000) vd.report_output_file_size(opts, in_, out) assert 'No reason' in caplog.text + caplog.clear() + + with patch('ocrmypdf._validation.jbig2enc.available', return_value=False): + vd.report_output_file_size(opts, in_, out) + assert 'optional dependency' in caplog.text + caplog.clear() + + opts = make_opts(in_, out, optimize=0) + vd.report_output_file_size(opts, in_, out) + assert 'disabled' in caplog.text + caplog.clear() def test_false_action_store_true():