I've been mulling over the issue of PDF level support. One complication is that we probably don't even 100% support any given level of PDF, including 1.0! That is, there are probably a few missing features even at that level. Currently, we output with the claim of PDF 1.4, and so far, that looks valid (I have not seen any features beyond PDF 1.4). It is quite possible that a simple PDF may include no features beyond PDF 1.0, but we'll still call it 1.4, rather than going back through the code and marking every feature that is 1.1, 1.2, 1.3, or 1.4. As we add features beyond 1.4, such as 1.5's cross-reference streams, the output level will have to be bumped up to 1.5 or higher, or else the feature is barred (fatal error?) if we select a 1.4 (or lower) output level. If there is no output until the document is complete, we could allow the output level (in the first line of the PDF) to "float" to whatever we use. If the output level has to be written before processing is complete, we would either have to make a preliminary pass to see what the highest feature level is going to be, or kill the run if a feature (e.g., 1.5 level) is requested beyond the hard limit (e.g., 1.4 level output). Neither is particularly palatable, but we don't want to knowingly output a 1.5 level feature while claiming that the output is 1.4. That could break some PDF processors, readers, and tools.
It gets even worse with reading in an existing PDF. Right now, no check is made whether the input is claiming a PDF level above 1.4, nor whether any higher level features are found in the file. For example, PDF::Builder supposedly reads cross-reference streams (a 1.5 feature), but does not write them. Something we could do is to put a limit on input PDF file claimed level (default 1.4), and issue a warning if the file claims to be of higher level than that (a warning that some features of the input PDF may not be supported, and may cause problems). Or, we could assume that it's possible that the PDF file is actually of lower level than claimed, and only flag on a feature-by-feature basis. It does not appear that a read-in PDF is necessarily broken down into individual features (that could be checked for levels), so you might have PDF 1.7 level features hiding in a PDF that claims to be 1.4!
At a minimum, the output level should be at least the highest level of any PDF read in, which is what the PDF spec recommends. Beyond that, we could issue a warning for input files above some level, and could float the output level to any higher output features, up to some limit (beyond which the run is killed). So, there may be separate input and output PDF level limits (hard or soft), or just one (for output).