diff --git a/openhtmltopdf-examples/src/main/resources/visualtest/expected/issue-484-data-image-svg-xml-base64.pdf b/openhtmltopdf-examples/src/main/resources/visualtest/expected/issue-484-data-image-svg-xml-base64.pdf
new file mode 100644
index 000000000..58d8e4a89
Binary files /dev/null and b/openhtmltopdf-examples/src/main/resources/visualtest/expected/issue-484-data-image-svg-xml-base64.pdf differ
diff --git a/openhtmltopdf-examples/src/main/resources/visualtest/html/issue-484-data-image-svg-xml-base64.html b/openhtmltopdf-examples/src/main/resources/visualtest/html/issue-484-data-image-svg-xml-base64.html
new file mode 100644
index 000000000..4ef3e7c6d
--- /dev/null
+++ b/openhtmltopdf-examples/src/main/resources/visualtest/html/issue-484-data-image-svg-xml-base64.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/openhtmltopdf-examples/src/test/java/com/openhtmltopdf/visualregressiontests/VisualRegressionTest.java b/openhtmltopdf-examples/src/test/java/com/openhtmltopdf/visualregressiontests/VisualRegressionTest.java
index bca218ad0..65c04c110 100644
--- a/openhtmltopdf-examples/src/test/java/com/openhtmltopdf/visualregressiontests/VisualRegressionTest.java
+++ b/openhtmltopdf-examples/src/test/java/com/openhtmltopdf/visualregressiontests/VisualRegressionTest.java
@@ -1110,6 +1110,14 @@ public void testCssFontFaceRuleGoogle() throws IOException {
assertTrue(vt.runTest("css-font-face-rule-google"));
}
+ /**
+ * Test that img with src="data:image/svg+xml;base64,...." work.
+ */
+ @Test
+ public void testIssue484ImgSrcDataImageSvgBase64() throws IOException {
+ assertTrue(vt.runTest("issue-484-data-image-svg-xml-base64", TestSupport.WITH_SVG));
+ }
+
// TODO:
// + Elements that appear just on generated overflow pages.
// + content property (page counters, etc)
diff --git a/openhtmltopdf-pdfbox/src/main/java/com/openhtmltopdf/pdfboxout/PdfBoxReplacedElementFactory.java b/openhtmltopdf-pdfbox/src/main/java/com/openhtmltopdf/pdfboxout/PdfBoxReplacedElementFactory.java
index b8263c266..344eb1246 100644
--- a/openhtmltopdf-pdfbox/src/main/java/com/openhtmltopdf/pdfboxout/PdfBoxReplacedElementFactory.java
+++ b/openhtmltopdf-pdfbox/src/main/java/com/openhtmltopdf/pdfboxout/PdfBoxReplacedElementFactory.java
@@ -22,10 +22,16 @@
import com.openhtmltopdf.extend.*;
import com.openhtmltopdf.layout.LayoutContext;
import com.openhtmltopdf.render.BlockBox;
+import com.openhtmltopdf.resource.ImageResource;
import com.openhtmltopdf.resource.XMLResource;
+import com.openhtmltopdf.util.ImageUtil;
import org.w3c.dom.Element;
+import java.io.ByteArrayInputStream;
+import java.io.DataInputStream;
+import java.io.StringReader;
+
public class PdfBoxReplacedElementFactory implements ReplacedElementFactory {
private final SVGDrawer _svgImpl;
private final SVGDrawer _mathmlImpl;
@@ -56,10 +62,10 @@ public ReplacedElement createReplacedElement(LayoutContext c, BlockBox box,
} else if (nodeName.equals("img")) {
String srcAttr = e.getAttribute("src");
if (srcAttr != null && srcAttr.length() > 0) {
-
//handle the case of linked svg from img tag
- if (srcAttr.endsWith(".svg") && _svgImpl != null) {
- XMLResource xml = uac.getXMLResource(srcAttr);
+ boolean isDataImageSvg = false;
+ if (_svgImpl != null && (srcAttr.endsWith(".svg") || (isDataImageSvg = srcAttr.startsWith("data:image/svg+xml;base64,")))) {
+ XMLResource xml = isDataImageSvg ? XMLResource.load(new ByteArrayInputStream(ImageUtil.getEmbeddedBase64Image(srcAttr))) : uac.getXMLResource(srcAttr);
if (xml != null) {
return new PdfBoxSVGReplacedElement(xml.getDocument().getDocumentElement(), _svgImpl, cssWidth, cssHeight, box, c, c.getSharedContext());