You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-users@xmlgraphics.apache.org by Karel Vervaeke <ka...@outerthought.org> on 2011/06/24 13:15:47 UTC
Create SVG with via Java2D graphics.
Hi, I am trying insert text links in an SVG document while using
SVGGraphics2D.
The end result should look something like this:
<svg:a xlink:href="...."><svg:text...>Hello world</svg:text></svg:a>
Currently I do this by using an extension handler to put a custom attribute
on the svg:text element.
svg:text elements with this attribute are wrapped in a <svg:a> using xslt,
but I would rather do it in one step.
Is this possible?
Regards,
Karel
ps: here's how I currently add the attribute on the svg:text element:
svgGraphicsContext.setExtensionHandler(new LinkPaintHandler());
svgGraphics2d.setPaint(new LinkPaint("http://www.google.com"));
svgGraphics2D.drawString("Hello world", 100, 200);
public class LinkPaint extends Paint {
private String href;
public LinkPaint(String href) {
this.href = href;
}
// getHref, setHref...
}
public class LinkPaintHandler extends DefaultExtensionHandler {
public SVGPaintDescriptor handlePaint(Paint paint,
SVGGeneratorContext generatorContext) {
if (paint instanceof LinkPaint) {
Element def =
generatorContext.getDOMFactory().createElementNS(SVGUtil.SVG_NS, "def");
String id =
generatorContext.getIDGenerator().generateID("paintdef");
def.setAttribute("id", id);
return new SVGLinkPaintDescriptor(((LinkPaint)paint).getHref());
}
return null;
}
}
public class SVGLinkPaintDescriptor extends SVGPaintDescriptor {
private String href;
public SVGLinkPaintDescriptor(String href) {
super("#0000ff", SVG_OPAQUE_VALUE);
this.href = href;
}
@Override
public Map getAttributeMap(Map attrMap) {
Map result = super.getAttributeMap(attrMap);
if (result == null)
result = new HashMap();
if (href != null)
result.put(XLINK_HREF_QNAME, href);
return result;
}
}
--
Karel Vervaeke
http://outerthought.org/
Open Source Content Applications
Makers of Kauri, Daisy CMS and Lily