Вот как я должен был это сделать, если высота или ширина больше, чем указано в моем SetAttribute.Затем вы должны выбрать высоту или ширину, в соответствии с которыми одно из них соответствует значению, которое, например, в моем списке имеет высота, и убедиться, что оно немного больше этого значения.
List<Rectangle> rectangles = new ArrayList<Rectangle>();
rectangles.add(new Rectangle(0, 0, 170, 180, "7FFF00"));
rectangles.add(new Rectangle(15, 120, 825, 140, "D2691E"));
//Here are width and height to SVG file.
request.setAttribute("svg", Drawing.drawSvg(rectangles, 200, 250));
Вот как это выглядиткак в html-файле.
<svg viewBox="0 0 200 500" width="200" height="500">
Здесь я создаю SVG-файл (Drawing.java)
private static StringBuilder drawRectangles(List<Rectangle> rectangles)
{
StringBuilder stringBuilder = new StringBuilder();
for(Rectangle rectangle:rectangles)
stringBuilder.append(rectangle.toSvg());
return stringBuilder;
}
private static String initializeSvg(int width, int height) // viewport
{
String svg = "<svg viewBox=\"0 0 $1 $2\" width=\"$1\" height=\"$2\">$body</svg>";
svg = svg.replace("$1", String.valueOf(width));
svg = svg.replace("$2", String.valueOf(height));
return svg;
}
public static String drawSvg(List<Rectangle> rectangles, int svgWidth, int svgHeight)
{
//rectangles must check if it has a value greater than svgWidth & svgHeight.
//HERE
// Initialiser <svg> element.
String svg = initializeSvg(svgWidth, svgHeight);
// Saml <rect>'s for alle Rectangle objekter i samlingen.
StringBuilder stringBuilder = drawRectangles(rectangles);
// Returner <svg> med <rect>'s
return svg.replace("$body", stringBuilder.toString());
}
Rectangle.java file.
public String toSvg()
{
String rect = "<rect x=\"$1\" y=\"$2\" width=\"$3\" height=\"$4\" style=\"fill:none;stroke:#$5;stroke-width:5;\">";
rect = rect.replace("$1", String.valueOf(this.x));
rect = rect.replace("$2", String.valueOf(this.y));
rect = rect.replace("$3", String.valueOf(this.width));
rect = rect.replace("$4", String.valueOf(this.height));
rect = rect.replace("$5", String.valueOf(this.color));
rect += "</rect>";
return rect;
}
В основном,Избегание этих вещей может произойти, поэтому содержимое отображается не полностью.
Код из SVG:
<svg viewBox="0 0 200 500" width="200" height="500">
<rect x="0" y="0" width="210" height="170" style="fill:none;stroke:#7FFF00;stroke-width:5;"></rect>
<rect x="15" y="120" width="140" height="125" style="fill:none;stroke:#D2691E;stroke-width:5;"></rect>
</svg>