SQLテーブルからSVGコードを取得してからBatikに渡してトランスコードする(PNGを表示する)までの間に、私が理解できないことがあります。
以下の CF コードを実行すると、エラーが発生します: The image cannot be displayed because it contains errors . これは、これが生成する唯一のエラーです。
また、true を返す isXML() を使用してテーブルの値をテストしました。
しかし、もし私が:
- セクション 1 のコメントを解除します。
- CFDUMP によって生成された SVG コードを COPY し、
- その SVG コードをセクション 2 の CFSET に貼り付けます。
- コメント セクション 1 を再度コメント アウトします。
次に、期待どおりに PNG がブラウザに表示されます。CFDUMPでSVGコードを表示し、それをコードに手動で貼り付けて使用するプロセスは、何らかの方法で(不思議なことに)それを変更して機能させます...
ありとあらゆるバリエーションを試しました。CFDUMP で SVG コードを表示するときに、ColdFusion が何かわからないことをしているようです (または、SQL からの何らかの文字セットの問題でしょうか?)。
誰にもこれが何であるか考えがありますか?私は困惑しています。
<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>