opendataloader-project/opendataloader-pdf · error · IllegalArgumentException
Invalid page range '%s': start page cannot be greater than e
Error message
Invalid page range '%s': start page cannot be greater than end page
What it means
parseRange rejects a range where the start bound parses and is positive but is greater than the end bound (e.g. 5-2). The message names the offending range token, not the full input. This is distinct from a non-positive or non-numeric bound.
Source
Thrown at java/opendataloader-pdf-core/src/main/java/org/opendataloader/pdf/api/Config.java:779
return result;
}
private static void parseRange(String range, String fullInput, List<Integer> result) {
String[] parts = range.split("-", SPLIT_KEEP_EMPTY_TRAILING);
if (parts.length != 2 || parts[0].isEmpty() || parts[1].isEmpty()) {
throw new IllegalArgumentException(String.format(INVALID_PAGE_RANGE_FORMAT, fullInput));
}
try {
int start = Integer.parseInt(parts[0].trim());
int end = Integer.parseInt(parts[1].trim());
if (start < 1 || end < 1) {
throw new IllegalArgumentException(
String.format("Page numbers must be positive: '%s'", fullInput));
}
if (start > end) {
throw new IllegalArgumentException(
String.format("Invalid page range '%s': start page cannot be greater than end page", range));
}
for (int i = start; i <= end; i++) {
result.add(i);
}
} catch (NumberFormatException e) {
throw new IllegalArgumentException(String.format(INVALID_PAGE_RANGE_FORMAT, fullInput));
}
}
private static void parseSinglePage(String page, String fullInput, List<Integer> result) {
try {
int pageNum = Integer.parseInt(page);
if (pageNum < 1) {
throw new IllegalArgumentException(
String.format("Page numbers must be positive: '%s'", fullInput));
}View on GitHub (pinned to a7789b8e77)
Solutions
- Order the range so start <= end.
- When constructing from two page numbers, normalize: min + "-" + max.
Example fix
// before: config.setPages(high + "-" + low); // after: config.setPages(Math.min(low, high) + "-" + Math.max(low, high));
Defensive patterns
Strategy: validation
Validate before calling
for (String t : pages.split(",")) {
if (t.contains("-")) {
String[] h = t.split("-", -1);
int a = Integer.parseInt(h[0].trim()), b = Integer.parseInt(h[1].trim());
if (a > b) throw new IllegalArgumentException("Range start > end: " + t);
}
}
config.setPages(pages); Try / catch
try { config.setPages(raw); }
catch (IllegalArgumentException e) { /* normalize order or reprompt */ } Prevention
- When building from two numbers, normalize to min + "-" + max.
- Validate start <= end on every range token upstream.
When it happens
Trigger: config.setPages("5-2"), config.setPages("10-9").
Common situations: User swaps start/end; range built from min/max variables assigned in the wrong order.
Related errors
- Invalid page range format: '%s'. Expected format: 1,3,5-7
- Page numbers must be positive: '%s'
- Unsupported table method '%s'. Supported values: %s
- Unsupported reading order '%s'. Supported values: %s
- Unsupported image output mode '%s'. Supported values: %s
AI-assisted analysis of opendataloader-project/opendataloader-pdf@a7789b8e77 (2026-08-14).
Data as JSON: /api/errors/23d3ac5796038364.
Report an issue: GitHub.