This blog post probably only applies to people building reusable components and UDFs, but I ran into an interesting issue today I thought I'd share with my readers. MrBuzzy (he prefers to go by his nickname) reported an issue with pdfUtils when used on a site with cfsetting enablecfoutputonly=true turned on.
This tag is one of the ways in which you can help reduce the amount of whitespace ColdFusion generates. I talk about this in depth here: ColdFusion Whitespace Options.
My pdfUtils CFC has a method, getText, that extracts the text from a PDF document. This method uses DDX (XML) to create the instructions necessary to get the text:
<!--- Create DDX --->
<cfsavecontent variable="ddx">
<?xml version="1.0" encoding="UTF-8"?>
<DDX xmlns="http://ns.adobe.com/DDX/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ns.adobe.com/DDX/1.0/ coldfusion_ddx.xsd">
<DocumentText result="Out1">
<PDF source="doc1"/>
</DocumentText>
</DDX>
</cfsavecontent>
<cfset ddx = trim(ddx)>
I had output="false" on the CFC method, but that doesn't prevent cfsavecontent from working. It just prevents any output from leaving the method. However, this immediately failed when used in context with cfsetting:
<cfsetting enablecfoutputonly="true">
<cfset pdf = createObject("component", "pdfutils")>
<cfset mypdf = expandPath("./testpdf.pdf")>
<cfset results = pdf.getText(mypdf)>
<cfdump var="#results#">
Of course, the fix was easy enough, I just wrapped the DDX in cfoutput:
<!--- Create DDX --->
<cfsavecontent variable="ddx">
<cfoutput>
<?xml version="1.0" encoding="UTF-8"?>
<DDX xmlns="http://ns.adobe.com/DDX/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ns.adobe.com/DDX/1.0/ coldfusion_ddx.xsd">
<DocumentText result="Out1">
<PDF source="doc1"/>
</DocumentText>
</DDX>
</cfoutput>
</cfsavecontent>
Simple enough of a fix, but I definitely will have to keep this in mind for my other CFCs.