diff --git a/app/core/src/main/java/stirling/software/SPDF/config/ExternalAppDepConfig.java b/app/core/src/main/java/stirling/software/SPDF/config/ExternalAppDepConfig.java index a703d1da3..22ad2adf4 100644 --- a/app/core/src/main/java/stirling/software/SPDF/config/ExternalAppDepConfig.java +++ b/app/core/src/main/java/stirling/software/SPDF/config/ExternalAppDepConfig.java @@ -148,6 +148,31 @@ public class ExternalAppDepConfig { "WeasyPrint version could not be determined ({} --version)", command)); } + + // Extra: enforce minimum qpdf version if command matches + if (isQpdf(command)) { + Optional version = getVersionSafe(command, "--version"); + version.ifPresentOrElse( + v -> { + Version installed = new Version(v); + Version required = new Version("12.0.0"); + if (installed.compareTo(required) < 0) { + List affectedGroups = + commandToGroupMapping.getOrDefault(command, List.of("qpdf")); + for (String group : affectedGroups) { + endpointConfiguration.disableGroup(group); + } + log.warn( + "qpdf version {} is below required {} - disabling group(s): {}", + installed, + required, + String.join(", ", affectedGroups)); + } else { + log.info("qpdf {} meets minimum {}", installed, required); + } + }, + () -> log.warn("qpdf version could not be determined ({} --version)", command)); + } } private boolean isWeasyprint(String command) { @@ -155,6 +180,10 @@ public class ExternalAppDepConfig { || command.toLowerCase(Locale.ROOT).contains("weasyprint"); } + private boolean isQpdf(String command) { + return command.toLowerCase(Locale.ROOT).contains("qpdf"); + } + private List getAffectedFeatures(String group) { List endpoints = new ArrayList<>(endpointConfiguration.getEndpointsForGroup(group)); return endpoints.stream().map(this::formatEndpointAsFeature).toList();