it does pretty much the same thing as for file in *; do ... done but in a more roundabout, recursive way.
while read -r -d $'\0' file
echo "working with file $file"
lp -o media=a4 -o number-up=2 -o fit-to-page -o sides=two-sided-long-edge "$file"
done < <(find /path/to/stuff -iname '*.pdf' -print0)
find looks for files according to criteria you give it (eg -iname '*.pdf') and its null-delimited output (-print0) feeds the loop.
General idea is this:
By default while read combo will eat 'records' delimited by newlines one by one (in other words line by line), but here we set delimiter to null char to match the format of find output ( -d $'\0'). That means that each filename found by find gets in perfect condition to the loop body inside the file variable and from now on it's exactly the same story as with the for loop
while read variable(s) ; do [stuff with variable(s)]; done < <( some_command )
and if you want to simply see the file names, just run the same find command but without -print0 (it's not too human readable with it)