Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将SVG变量通过Coldfusion传递到Batik转码器时出现问题_Coldfusion_Svg_Batik - Fatal编程技术网

将SVG变量通过Coldfusion传递到Batik转码器时出现问题

将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代码,然后手动将其粘贴到代码中以某种方式(神秘地)

在从SQL表中获取SVG代码和将其传递到Batik中进行代码转换(显示PNG)之间,有一些事情我不理解

如果我运行下面的CF代码,我会得到一个错误:图像无法显示,因为它包含错误。这是所有这些产生的唯一错误

我还使用返回true的isXML()测试了表中的值

但如果我:

  • 联合国评论第1节
  • 复制CFDUMP生成的SVG代码
  • 将SVG代码粘贴回第2节中的CFSET
  • 并重新注释第1节中的注释
  • 然后,PNG将按预期显示在浏览器中。在CFDUMP中显示SVG代码,然后手动将其粘贴到代码中以某种方式(神秘地)使用它的过程会改变它,使其工作

    我尝试过各种各样的变化。当ColdFusion在CFDUMP中显示SVG代码时,它似乎在做一些我不理解的事情(或者可能是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>
    
    
    选择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()
    选项的情况下从浏览器的源代码复制文本?当您手动将字符串粘贴到代码中时,该字符串看起来是什么样子的。