ColdFusion Only

This SVN rendering hack only works on ColdFusion, not Railo. The general idea still holds, but the response handling is simpler and you have to supply Batik yourself.

svg_demo.cfm

<cfoutput>
<h1>ColdFusion Only</h1>
<p>This SVN rendering hack only works on ColdFusion, not Railo.  The general idea still holds, but the response handling is simpler and you have to supply Batik yourself.
</p>
<!---
<img src="svg_demo_img.cfm" />
--->
<h2><code>svg_demo.cfm</code></h2>
<pre>#htmlEditFormat(fileRead(getCurrentTemplatePath()))#
</pre>
<h2><code>svg_demo_img.cfm</code></h2>
<pre>#htmlEditFormat(fileRead(replace(getCurrentTemplatePath(), "svg_demo", "svg_demo_img")))#
</pre>
</cfoutput>

svg_demo_img.cfm

<!--- doesn't work on Railo, so redirect to info page --->
<cflocation url="svg_demo.cfm" statusCode="303" addToken="false" />

<cfsavecontent variable="svg">
<cfoutput>
<svg xmlns="http://www.w3.org/2000/svg" 
 xmlns:xlink="http://www.w3.org/1999/xlink" 
 width='300px' height='300px'>

<title>Small SVG example</title>

<circle cx='120' cy='150' r='60' style='fill: gold;'>
 <animate attributeName='r' from='2' to='80' begin='0' 
 dur='3' repeatCount='indefinite' /></circle>

<polyline points='120 30, 25 150, 290 150' 
 stroke-width='4' stroke='brown' style='fill: none;' />

<polygon points='210 100, 210 200, 270 150' 
 style='fill: lawngreen;' /> 
   
<text x='60' y='250' fill='blue'>Hello, World!</text>

</svg>
</cfoutput>
</cfsavecontent>
<cfscript>
	context = getPageContext();
	context.setFlushOutput(false);
	response = context.getResponse().getResponse();
	response.setContentType("image/png");
	transcoder = createObject("java", "org.apache.batik.transcoder.image.PNGTranscoder").init();
	inputStream = createObject("java", "java.io.StringBufferInputStream").init(svg);
	input = createObject("java", "org.apache.batik.transcoder.TranscoderInput").init(inputStream);
	outputStream = response.getOutputStream();
	output = createObject("java", "org.apache.batik.transcoder.TranscoderOutput").init(outputStream);
	transcoder.transcode(input, output);
	outputStream.close();
</cfscript>