PDF::Template and
Excel::Template, combined with
XML::Parser (which they already use cause the layout/template files are in XML) and some code anyone can write should be able to do this. I didn't extend the param() method for those modules beyond what
HTML::Template's does because that wasn't in my initial scope. But, there's no reason I couldn't accept an XML document (either filename, filehandle, or scalarref) as the parameter list ... unless I'm missing something obvious (which is always a distinct possibility).
------
We are the carpenters and bricklayers of the Information Age.
Please remember that I'm crufty and crochety. All opinions are purely mine and all code is untested, unless otherwise specified.