This is happening because you are doing the right thing, you are quoting your variables. However, because they are quoted, that means the two ranges are passed as a single string to pdftk and it expects two or more strings separated by spaces. In this specific case, where you know and control what the variable's value is, you might be able to get away with no quoting. But not in all cases, and this looks like you're asking users for input so they could pass anything to the script, making that a security risk, so the clean solution is to use an array instead. Try this:
page_range=( $(printf '%s\n' "$extract_values" | cut -d '|' -f 1) )
You can then pass that as "${page_range[@]}" and have both the benefits of safely quoting your variables, and the ease of use of having multiple ranges in a variable.
So, the relevant lines in your script become:
page_range=$page_range=( $(printf '%s\n' "$extract_values" | cut -d '|' -f 1) )
[ . . . ]
## With thanks to https://stackoverflow.com/a/9429887/1081936
page_range_slugify="$(IFS="_" ; printf '%s\n' "${page_range[*]}")"
[ . . . ]
pdftk "$f" cat "${page_range[@]}" output "${fz}_$page_range_slugify".pdf