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