2017-05-05 141 views
0

我正在制作一个图表,我需要将它从html导出到pdf。我使用的pdf引擎无法执行JS,因此我需要找到一种方法从服务器端生成HTML SVG。甜甜圈图仅使用SVG标记

这是我目前有:

<svg height="450px" width="100%" class="nvd3-svg" style="height: 450px; width: 100%;"> 
 
\t <g class="nvd3 nv-wrap nv-pieChart" transform="translate(20,-25)"> 
 
\t \t <g> 
 
\t \t \t <g class="nv-pieWrap nvd3-svg"> 
 
\t \t \t \t <g class="nvd3 nv-wrap nv-pie nv-chart-6755" transform="translate(0,0)"> 
 
\t \t \t \t \t <g> 
 
\t \t \t \t \t \t <g class="nv-pie" transform="translate(353,227.5)"> 
 
\t \t \t \t \t \t \t <g class="nv-slice" fill="#003087" stroke="#003087"> 
 
\t \t \t \t \t \t \t \t <path d="M1.1144285872240914e-14,-182A182,182 0 1,1 -177.4368800170919,40.49880998004924L-110.89805001068244,25.311756237530776A113.75,113.75 0 1,0 6.965178670150571e-15,-113.75Z"> 
 
\t \t \t \t \t \t \t \t </path> 
 
\t \t \t \t \t \t \t </g> 
 
\t \t \t \t \t \t \t <g class="nv-slice hover" fill="#393939" stroke="#393939"> 
 
\t \t \t \t \t \t \t \t <path d="M-178.555801655312,40.75419654232691A183.1476967930029,183.1476967930029 0 0,1 -3.364368609731414e-14,-183.1476967930029L-2.0895536010451713e-14,-113.75A113.75,113.75 0 0,0 -110.89805001068244,25.311756237530776Z"> 
 
\t \t \t \t \t \t \t \t </path> 
 
\t \t \t \t \t \t \t </g> 
 
\t \t \t \t \t \t </g> 
 
\t \t \t \t \t \t <g class="nv-pieLabels" transform="translate(353,227.5)"> 
 
\t \t \t \t \t \t \t <g class="nv-label" transform="translate(115.6133304699599,92.19855444986021)"> 
 
\t \t \t \t \t \t \t \t <rect rx="3" ry="3" style="stroke: rgb(255, 255, 255); fill: rgb(255, 255, 255);"> 
 
\t \t \t \t \t \t \t \t </rect> 
 
\t \t \t \t \t \t \t \t <text style="text-anchor: middle; fill: white;">71%</text> 
 
\t \t \t \t \t \t \t </g> 
 
\t \t \t \t \t \t \t <g class="nv-label" transform="translate(-115.61333046995992,-92.1985544498602)"> 
 
\t \t \t \t \t \t \t \t <rect rx="3" ry="3" style="stroke: rgb(255, 255, 255); fill: rgb(255, 255, 255);"> 
 
\t \t \t \t \t \t \t \t </rect> 
 
\t \t \t \t \t \t \t \t <text style="text-anchor: middle; fill: white;">29%</text> 
 
\t \t \t \t \t \t \t </g> 
 
\t \t \t \t \t \t </g> 
 
\t \t \t \t \t </g> 
 
\t \t \t \t </g> 
 
\t \t \t </g> 
 
\t \t \t <g class="nv-legendWrap nvd3-svg" transform="translate(0,25)"> 
 
\t \t \t \t <g class="nvd3 nv-legend" transform="translate(10,205)"> 
 
\t \t \t \t \t <g transform="translate(310,205)"> 
 
\t \t \t \t \t \t <g class="nv-series" transform="translate(0,5)"> 
 
\t \t \t \t \t \t \t <circle class="nv-legend-symbol" r="5" style="stroke-width: 2; fill: rgb(0, 48, 135); fill-opacity: 1; stroke: rgb(0, 48, 135);"> 
 
\t \t \t \t \t \t \t </circle> 
 
\t \t \t \t \t \t \t <text text-anchor="start" class="nv-legend-text" dy=".32em" dx="8" fill="#000">Cold</text> 
 
\t \t \t \t \t \t </g> 
 
\t \t \t \t \t \t <g class="nv-series" transform="translate(65,5)"> 
 
\t \t \t \t \t \t \t <circle class="nv-legend-symbol" r="5" style="stroke-width: 2; fill: rgb(57, 57, 57); fill-opacity: 1; stroke: rgb(57, 57, 57);"> 
 
\t \t \t \t \t \t \t </circle> 
 
\t \t \t \t \t \t \t <text text-anchor="start" class="nv-legend-text" dy=".32em" dx="8" fill="#000">Hot</text> 
 
\t \t \t \t \t \t </g> 
 
\t \t \t \t \t </g> 
 
\t \t \t \t </g> 
 
\t \t \t </g> 
 
\t \t </g> 
 
\t </g> 
 
</svg>

从上面的代码中,什么样的价值观,我需要改变,使这个图表相应地响应冷和热的动态值。我已经研究并调整了很多,没有进展。您的帮助将不胜感激。

+0

请格式化您的代码,使其可读。 – sean

+0

谢谢肖恩,现在它已经形成了 –

回答

0

要更改图形的两个部分,您需要更改两个<path>元素。更具体地说,这些路径的d属性。

d属性描述曲线的形状。如果我将更大的格式化为更简洁的格式,并减少小数位数,那么您应该能够更好地看到正在发生的事情。

M -178.56, 40.75 
A 183.14, 183.14 0 0,1 -3.36e-14,-183.14 
L -2.08e-14, -113.75 
A 113.75,113.75 0 0,0 -110.89, 25.31 
Z 

它在大约(-178,40)处开始(M =“移动到”)。然后画出rdius 183的弧(“A”)到(0,-183)。然后从外半径到内半径的一条线(“L”)。然后最后再一个弧(“A”)回到开始。最后的“Z”关闭曲线,以便填充。

所以要改变图表部分的大小。您需要调整两个“A”命令和“L”命令。

您可以通过阅读the SVG specification了解更多关于如何做到这一点的信息。或者,您可以查看网络上提供的大量教程。

您的SVG图看起来像可能是由SVG图形库(如D3.js)生成的。您可能想要调查该选项。