将SVG变量通过Coldfusion传递到Batik转码器时出现问题
在从SQL表中获取SVG代码和将其传递到Batik中进行代码转换(显示PNG)之间,有一些事情我不理解 如果我运行下面的CF代码,我会得到一个错误:图像无法显示,因为它包含错误。这是所有这些产生的唯一错误 我还使用返回true的isXML()测试了表中的值 但如果我:将SVG变量通过Coldfusion传递到Batik转码器时出现问题,coldfusion,svg,batik,Coldfusion,Svg,Batik,在从SQL表中获取SVG代码和将其传递到Batik中进行代码转换(显示PNG)之间,有一些事情我不理解 如果我运行下面的CF代码,我会得到一个错误:图像无法显示,因为它包含错误。这是所有这些产生的唯一错误 我还使用返回true的isXML()测试了表中的值 但如果我: 联合国评论第1节 复制CFDUMP生成的SVG代码 将SVG代码粘贴回第2节中的CFSET 并重新注释第1节中的注释 然后,PNG将按预期显示在浏览器中。在CFDUMP中显示SVG代码,然后手动将其粘贴到代码中以某种方式(神秘地)
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<CFQUERY NAME="getSketch">
SELECT sketch_svg AS svg
FROM sketch
WHERE ordID = 1
</CFQUERY>
<cfset svg = Replace(getSketch.svg,'"','','all')>
<!--- Commented-out Section 1
<cfset svg = Replace(svg,"'","''",'all')>
<cfset svg = Replace(svg,"##","####",'all')>
<CFDUMP var="#svg#" abort>
--->
<!--- Commented-out Section 2
<cfset svg = '[Manually paste SVG code from CFDUMP here...]'>
--->
<!--- The following takes the svg code and displays it as a PNG in the browser - This works fine if the SVG code is okay...) --->
<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);
output.close();
outputStream.close();
</cfscript>
选择sketch_svg作为svg
从草图
其中ORDD=1
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);
转码器。转码(输入、输出);
output.close();
outputStream.close();
cfdump
明确地操作数据,以便在浏览器中显示。尝试此操作,取消对cfdump
代码的注释并运行它。然后打开浏览器的“查看源代码”选项。现在查看源代码中的cfdump'ed输出,以查看该字符串的外观。也许它会对cfdump
正在进行的格式化有所帮助,您可以在代码中执行类似的操作。由于您正在处理XML,另一件事可能是尝试xmlformat()
函数@例如,Miguel-F它漏掉了所有XML<代码>svg保留Aspectratio=“xMinYMin”viewBox=“130 98 140 105”但这会作为常规字符显示在浏览器中,因此当我复制并通过它返回时。。。我开始怀疑这是否与保存到SQL表和/或从SQL表检索有关…@Miguel-接下来我将尝试直接从DOM转换SVG。如果这样做行得通,那么可能严格来说,这就是保存到SQL中并从SQL中恢复所做的事情。我可能错过了它,但您是否尝试过在不使用xmlformat()
选项的情况下从浏览器的源代码复制文本?当您手动将字符串粘贴到代码中时,该字符串看起来是什么样子的。