package org.apache.poi.hslf.blip; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import net.arnx.wmf2svg.gdi.svg.SvgGdi; import net.arnx.wmf2svg.gdi.wmf.WmfParser; import net.pbdavey.awt.Graphics2D; import org.apache.poi.hslf.model.Picture; import org.apache.poi.hslf.usermodel.PictureData; import org.w3c.dom.Document; import and.awt.Rectangle; import android.graphics.Color; import android.graphics.Paint; import android.widget.ImageView.ScaleType; import com.larvalabs.svgandroid.SVG; import com.larvalabs.svgandroid.SVGParser; import com.libsvg.SvgDrawable; public class WMFPaiter implements ImagePainter { @Override public void paint(Graphics2D graphics, PictureData pict, Picture parent) { try { InputStream in = new ByteArrayInputStream(pict.getData()); WmfParser parser = new WmfParser(); final SvgGdi gdi = new SvgGdi(false); parser.parse(in, gdi); Document doc = gdi.getDocument(); // ByteArrayOutputStream out = new ByteArrayOutputStream(); FileOutputStream out = new FileOutputStream("/sdcard/ppt.svg"); output(doc, out); // InputStream svgIn = new ByteArrayInputStream(out.toByteArray()); // SVG svg = SVGParser.getSVGFromInputStream(svgIn); // // Get the picture // android.graphics.Picture picture = svg.getPicture(); // SvgDrawable svg = new SvgDrawable(svgIn); // svg.setScaleType(ScaleType.FIT_XY); // Rectangle anchor = parent.getAnchor(); // float scale = (float)anchor.width/svg.getIntrinsicWidth(); // graphics.scale(scale, scale); // graphics.translate(anchor.x, anchor.y); // svg.setBounds(anchor.x, anchor.y, anchor.x + anchor.width, anchor.y + anchor.height); // svg.draw(graphics.canvas); Paint p = new Paint(); p.setColor(Color.BLACK); graphics.canvas.drawRect(anchor.x, anchor.y, anchor.x + anchor.width, anchor.y + anchor.height, p); } catch (Exception e) { e.printStackTrace(); } } private static void output(Document doc, OutputStream out) throws Exception { TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer(); transformer.setOutputProperty(OutputKeys.METHOD, "xml"); transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, "-//W3C//DTD SVG 1.0//EN"); transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"); transformer.transform(new DOMSource(doc), new StreamResult(out)); out.flush(); out.close(); } }