Create SVG with <svg:a xlink:href> via Java2D graphics.

Karel Vervaeke <[email protected]>
Newsgroups gmane.text.xml.batik.user
Message-ID <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.