The cfdocument tag allows you to dynamically create PDF files. You can allow users to choose their output formats in a variety of ways.
The one I use most often is to include a select control on the form where the user enters their search parameters. My choices are generally HTML or Excel, but it's the same general idea. When processing the form submission, I do the display stuff last. It will resemble this:
<cfif form.showas is 'html'>
code for web page
<cfelse>
code for something else
<cfif>
Since your choices are HTML or PDF, the cfsavecontent tag might come in handy.
If your page is not accessed from a form, you could use cfsavecontent to generate a session variable with all the output. Then, on your web page, offer a link or button or something that allows the user to render as PDF. All you do is combine the session variable with the cfdocument tag and Bob's your uncle.