No one else encountered this? Really?
The solution I came up with was to send PDF processing to another server
running CF7. That server processes the CFDocument tag and sends back the file.
Here's the custom tag I came up with to hand off and receive the data.
<!---
TAG NAME AND PURPOSE
tag_pdfball by Jordan Roher, CorpDirect Agents, Inc.
Send a ColdFusion file to another server to be processed into a
PDF.
Then store and return the location of said PDF.
HISTORY
March 30, 2009 Created
CONTACT
Jordan Roher
[email protected]
PARAMETERS
INPUT
name
required type notes
---------------------------------------------------------------------------
document
yes string The saved content you want to
generate as a PDF
server
yes string Full address to server and file
you want to send this file to.
timeout
no number How long, in seconds, should
the server wait to get that PDF? Defaults to 60 seconds.
tempFolder
no string Where should I put the
temporary file I generate and the one received from the server? Defaults to
caller.email_attach_path.
OUTPUT
name
always type notes
---------------------------------------------------------------------------
pdfball.okay
yes boolean Did it work?
pdfball.file
no string If successful, absolute path to the
file received
pdfball.error
no string If not successful, the error message
returned from the other server
--->
<cfif ThisTag.executionMode IS "start">
<cfscript>
// Constants
null = ""; dot = ".";
slash = "/";
backslash = "\"; semicolon = ";";
dash = "-";
star = "*"; space = " ";
all = "all";
one = "one"; comma = ",";
tab = chr(9);
newline = chr(13); newline2 = chr(10);
amp = "&";
// Parameter collection and processing
universalParameters = "
document
, timeout
, tempFolder
, server
";
// Remove newlines, spaces and tab characters
universalParameters = REReplace(universalParameters,
"[\s]", null, all);
// Populate variables with null
for(i = 1; i LTE ListLen(universalParameters); i = i +
1) {
if(NOT StructKeyExists(attributes,
ListGetAt(universalParameters, i))) {
StructInsert(attributes,
ListGetAt(universalParameters, i), null);
}
}
// General error checking
errorMessage = null;
if(attributes.document IS null) {
errorMessage = "Document to generate not
specified";
}
if(attributes.timeout IS null OR NOT
IsNumeric(attributes.timeout)) {
attributes.timeout = 60;
}
if(attributes.tempFolder IS null AND
IsDefined("caller.email_attach_path")) {
attributes.tempFolder =
caller.email_attach_path;
}
if(NOT DirectoryExists(attributes.tempFolder)) {
errorMessage = "Temporary folder not
accessible";
}
if(attributes.server IS null) {
errorMessage = "Other server not specified";
}
</cfscript>
<cfif errorMessage IS NOT null>
<cfabort showerror="#errorMessage#">
</cfif>
<!--- Remove the bangs in front of the CF tags --->
<cfset attributes.document = Replace(attributes.document, "<!cf",
"<cf", all)>
<cfset attributes.document = Replace(attributes.document, "</!cf",
"</cf", all)>
<!--- Save it as a file --->
<cfset tempFile = CreateUUID() & ".cfm">
<cfloop condition="FileExists('#attributes.tempfolder##tempFile#')">
<cfset tempFile = CreateUUID() & ".cfm">
</cfloop>
<cffile action="WRITE" file="#attributes.tempFolder##tempFile#"
output="#attributes.document#" addnewline="No" fixnewline="No">
<!--- Send this file to another server and wait for the response --->
<cfhttp url="#attributes.server#" method="POST" getasbinary="auto"
timeout="#attributes.timeout#">
<cfhttpparam type="FILE" name="processPage"
file="#attributes.tempFolder##tempFile#">
</cfhttp>
<!--- Get our return structure ready --->
<cfset pdfBall = StructNew()>
<!--- The response should be a binary file --->
<cfif IsBinary(cfhttp.fileContent)>
<!--- Yay, it worked. Huzzas all around.--->
<cfset pdfBall.okay = true>
<!--- Save that PDF as a file --->
<cfset tempFilePDF = CreateUUID() & ".pdf">
<cfloop
condition="FileExists('#attributes.tempfolder##tempFilePDF#')">
<cfset tempFilePDF = CreateUUID() & ".pdf">
</cfloop>
<cffile action="WRITE"
file="#attributes.tempFolder##tempFilePDF#" output="#cfhttp.fileContent#"
addnewline="No" fixnewline="No">
<!--- Record the name and away we go --->
<cfset pdfBall.file = "#attributes.tempFolder##tempFilePDF#">
<cfelse>
<!--- Something blew up. File an error report, maybe? --->
<cfset pdfBall.okay = false>
<!--- Here's what happened, ossifer. --->
<cfset pdfBall.error = cfhttp.fileContent>
</cfif>
<!--- Either way, delete the original file --->
<cffile action="DELETE" file="#attributes.tempFolder##tempFile#">
<cfset caller.pdfBall = pdfBall>
<cfelse>
<cfexit>
</cfif>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to
date
Get the Free Trial
http://ad.doubleclick.net/clk;207172674;29440083;f
Archive:
http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:321262
Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm
Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4