Html 到图像 SVG 导出

jib*_*abs 5 javascript svg

我需要能够将 Div 内的所有内容导出到可导出的 SVG 文件中。我正在使用 html-to-image 库来执行此操作。我遇到的问题是生成的 SVG 路径不正确并且不能作为 SVG 文件使用。尝试了一些事情,但我卡住了。以下是您可以运行来测试的完整代码。

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <body>



    <!-- 1. Constructing a Div -->
    <div id="capture" style="padding: 10px; background: #f5da55">
        <h4 style="color: #000; ">Hello world!</h4>
    </div>


    <!-- 2. Using HTML-to-Image to convert that Div to SVG -->
      <script src="https://cdnjs.cloudflare.com/ajax/libs/html-to-image/1.9.0/html-to-image.js"></script>
      <script type="text/javascript">
        
      
      function filter (node) {
        return (node.tagName !== 'i');
      }

      htmlToImage.toSvg(document.getElementById('capture'), { filter: filter })
        .then(function (dataUrl) {

      //--3. the following Alert shows the generated SVG file for reference, but the SVG path generated is wrong
          alert(dataUrl);

          
        });
      </script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

小智 1

从 html-to-image 返回的 dataUrl 是 url 编码的。因此,您需要解码,还需要省略第一个 mimie 类型字符串,即逗号之前的部分,。在此示例中,我将数据字符串与,svg 字符串分开并进行解码。

 <div id="svg">
 </div>
Run Code Online (Sandbox Code Playgroud)
 htmlToImage.toSvg(document.getElementById('capture'), { filter: filter 
       })
        .then(function (dataUrl) {
          let svg = decodeURIComponent(dataUrl.split(',')[1])
          console.log(svg);
          document.getElementById('svg').innerHTML = svg          
        });
Run Code Online (Sandbox Code Playgroud)