You can extract names using one of the many Java XML libraries. Here is an example of using XPath from the Java DOM :
private static List<String> findNames(Document doc) throws XPathExpressionException { XPath xpath = XPathFactory.newInstance().newXPath(); NodeList nodes = (NodeList) xpath.evaluate("/process/p", doc, XPathConstants.NODESET); List<String> names = new ArrayList<String>(); for (int i = 0; i < nodes.getLength(); i++) { names.add(nodes.item(i).getTextContent()); } return names; }
Note: this may be a typo, but your XML is not very well formed - attribute values ββmust be specified. XML parsing fails otherwise.

You can use the AWT API to draw everything you need:
private static final int BORDER = 1; private static final int PADDING = 2; private static final int SPACER = 5; private static void draw(Graphics2D g, List<String> names) { FontMetrics metrics = g.getFontMetrics(); Rectangle box = new Rectangle(1, 1, 0, 0); box.height = metrics.getHeight() + (PADDING * 2); g.setColor(Color.WHITE); for (String name : names) { box.width = metrics.stringWidth(name) + (PADDING * 2); g.drawString(name, box.x + BORDER + PADDING, PADDING + BORDER + metrics.getHeight()); g.drawRect(box.x, box.y, box.width, box.height); box.x += box.width + (BORDER * 2) + SPACER; } }
This code simply draws names with some fields around them. I'm sure my biases are everywhere, but you probably understood.
There is an imageio API that can save in several popular data formats:
private static void save(List<String> names, File file) throws IOException { BufferedImage image = new BufferedImage(600, 50, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); try { draw(g, names); } finally { g.dispose(); } ImageIO.write(image, "png", file); }
Mcdowell
source share