0

SQLテーブルからSVGコードを取得してからBatikに渡してトランスコードする(PNGを表示する)までの間に、私が理解できないことがあります。

以下の CF コードを実行すると、エラーが発生します: The image cannot be displayed because it contains errors . これは、これが生成する唯一のエラーです。

また、true を返す isXML() を使用してテーブルの値をテストしました。

しかし、もし私が:

  1. セクション 1 のコメントを解除します。
  2. CFDUMP によって生成された SVG コードを COPY し、
  3. その SVG コードをセクション 2 の CFSET に貼り付けます。
  4. コメント セクション 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,'&quot;','','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>
4

0 に答える 0