Last Friday I posted a problem that I was having and with the help of
Hatton, who got me pointed in the right direction, and Leigh (his posts
show up as CS) who extended it a bit, it is now working. I am going to
post the results here but I will quickly explain what I was doing.
There are a series of forms that are pulled from a database using an CMS
system. When the forms are submitted, the user wanted a PDF emailed that
looks exactly like the form, except of course the input elements are
replaced with the submitted values. The easy way out would be to create
a separate action page for each form, but that was not the solution they
were looking for. Basically I needed everything to go to one file, and
regardless of what form was submitted, the same file processes each one.
The biggest headache was that all the forms are checklists, and thus
each row has three radio buttons. There are also some forms with text
fields, text areas and select lists. I could extract the text and even
get the filled values to show up, but I could not get the cells to line
up with their respective columns (a radio in column three, cell 1 would
show up in column one, cell 1 and crap like that). So anyway, like I
said, Leigh got it to work for me and I want to post the information in
case anyone else runs across this issue.
Bruce
<cfloop query="getContentObjectData">
<!--- Now we need strip out all the form elements and replace
them with what was submitted --->
<!--- first remove open/close form tags --->
<cfset NewContentBlock =
REReplace(contentBlock,"</*form[^>]*>","","ALL")>
<!--- Remove the hidden fields, otherwise they show up in the
header --->
<cfset NewContentBlock =
#REReplaceNoCase(NewContentBlock,'<input\s+[^>]*hidden[^>]*>', "","ALL")#>
<!--- get an array of all input tags --->
<cfset matches = reMatchNoCase('<input\s+[^>]*>', NewContentBlock)>
<!--- for each input field ... --->
<cfloop array="#matches#" index="element">
<!--- initialize a structure for storing input field
properties --->
<cfset htmlField = {} >
<!--- extract field properties: name, value AND type (if
exists) --->
<cfset params =
reMatchNoCase('((name|value|type)=\"[^\"]*\")', element)>
<cfloop array="#params#" index="pair">
<cfif listLen(pair, "=")>
<cfset htmlField[listFirst(pair, "=")] =
replace(listLast(pair, "="), '"', "", "all")>
</cfif>
</cfloop>
<!--- verify this field was submitted in the current form --->
<cfset fieldExists = structKeyExists(htmlField, "name") AND
structKeyExists(form, htmlField.name)>
<cfset isRadioButton = structKeyExists(htmlField, "type")
AND htmlField.type is "radio">
<!--- if the field exists ... --->
<cfset newValue = "">
<cfif fieldExists>
<cfif isRadioButton>
<!--- AND it was the selected button, replace it
with an "X" --->
<cfif structKeyExists(htmlField, "value") AND
htmlField.value EQ form[htmlField.name]>
<cfset newValue = "x">
<cfelse>
<cfset newValue = " "> <!--- This is done
so that the form looks like the original, except instead of an X we
enter a non-breaking space --->
</cfif>
<!--- otherwise, assume it is a text field and replace
it with the field value --->
<cfelse>
<cfset newValue = form[htmlField.name]>
</cfif>
</cfif>
<!---- do the actual replace --->
<cfset NewContentBlock = reReplaceNoCase(NewContentBlock,
element, newValue, 'all')>
</cfloop>
</cfloop>
Once this is done I put everything inside a cfsavecontent tag, then use
CFDOCUMENT and create the PDF on the file system, and then attach it to
an email.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to
date
Get the Free Trial
http://ad.doubleclick.net/clk;160198600;22374440;w
Archive:
http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:302021
Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm
Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4