From 227045a4ae73a7f2707a6c339a25af03fd36a545 Mon Sep 17 00:00:00 2001 From: Arnaud Roques Date: Mon, 4 Jul 2022 18:40:37 +0200 Subject: [PATCH] fix https://github.com/plantuml/plantuml/issues/1053 --- .../sourceforge/plantuml/svg/SvgGraphics.java | 39 ++++++++++++++++++- .../sourceforge/plantuml/version/Version.java | 2 +- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/net/sourceforge/plantuml/svg/SvgGraphics.java b/src/net/sourceforge/plantuml/svg/SvgGraphics.java index 7c01ae1bc..213a624e7 100644 --- a/src/net/sourceforge/plantuml/svg/SvgGraphics.java +++ b/src/net/sourceforge/plantuml/svg/SvgGraphics.java @@ -71,6 +71,7 @@ import net.sourceforge.plantuml.SignatureUtils; import net.sourceforge.plantuml.awt.geom.Dimension2D; import net.sourceforge.plantuml.code.Base64Coder; import net.sourceforge.plantuml.security.SImageIO; +import net.sourceforge.plantuml.security.SecurityProfile; import net.sourceforge.plantuml.security.SecurityUtils; import net.sourceforge.plantuml.tikz.TikzGraphics; import net.sourceforge.plantuml.ugraphic.UGroupType; @@ -641,8 +642,19 @@ public class SvgGraphics { } public void createXml(OutputStream os) throws TransformerException, IOException { - createXmlInternal(os); -// s = removeXmlHeader(s); + if (images.size() == 0) { + createXmlInternal(os); + return; + } + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + createXmlInternal(baos); + String s = new String(baos.toByteArray()); + for (Map.Entry ent : images.entrySet()) { + final String k = "<" + ent.getKey() + "/>"; + s = s.replace(k, ent.getValue()); + } + s = removeXmlHeader(s); + os.write(s.getBytes()); } private String removeXmlHeader(String s) { @@ -882,7 +894,30 @@ public class SvgGraphics { ensureVisible(x + image.getWidth(), y + image.getHeight()); } + private final Map images = new HashMap(); + + + private void svgImageUnsecure(UImageSvg image, double x, double y) { + if (hidden == false) { + String svg = manageScale(image); + final String pos = ""; + svg = pos + svg.substring(5); + final String key = "imagesvginlined" + image.getMD5Hex() + images.size(); + final Element elt = (Element) document.createElement(key); + getG().appendChild(elt); + images.put(key, svg); + } + ensureVisible(x, y); + ensureVisible(x + image.getData("width"), y + image.getData("height")); + } + + public void svgImage(UImageSvg image, double x, double y) { + if (SecurityUtils.getSecurityProfile() == SecurityProfile.UNSECURE) { + svgImageUnsecure(image, x, y); + return; + } + // https://developer.mozilla.org/fr/docs/Web/SVG/Element/image if (hidden == false) { final Element elt = (Element) document.createElement("image"); diff --git a/src/net/sourceforge/plantuml/version/Version.java b/src/net/sourceforge/plantuml/version/Version.java index d8d94a7d7..3de4de91b 100644 --- a/src/net/sourceforge/plantuml/version/Version.java +++ b/src/net/sourceforge/plantuml/version/Version.java @@ -80,7 +80,7 @@ public class Version { } public static int beta() { - final int beta = 2; + final int beta = 3; return beta; }