This works pretty well. There are a couple of issues with it though.
There seems to be something strange with the way that Java renders the
fonts of the equations. Which characters are correctly rendered is
based entirely on which platform I run the program on. Also, the
placement of some of the equations isn't quite right. Most of them
look fine but there are a few that are getting garbled.
Travis
On Jun 8, 2008, at 6:53 AM, Yegor Kozlov wrote:
I extended HSLF to support custom image renderers. Here is what you
need to do to render WMF:
1. Checkout the latest trunk.
2. Download Apache Batik, http://xmlgraphics.apache.org/batik/
3. Include the Batik jar in the classpath.
4. Below is a mock up a class that can render WMF using Batik.
Include it in your project.
package org.apache.poi.hslf.blip;
import org.apache.poi.hslf.usermodel.PictureData;
import org.apache.poi.hslf.model.Picture;
import java.awt.*;
import java.io.*;
/**
* Use Apache Batik to render WMF into Graphics2D
*
* @author Yegor Kozlov
*/
public class WMFImagePainter implements ImagePainter {
public void paint(Graphics2D graphics, PictureData pict, Picture
parent) {
DataInputStream is = new DataInputStream(new
ByteArrayInputStream(pict.getData()));
org.apache.batik.transcoder.wmf.tosvg.WMFRecordStore wmfStore =
new
org.apache.batik.transcoder.wmf.tosvg.WMFRecordStore();
try {
wmfStore.read(is);
} catch (IOException e){
e.printStackTrace();
return;
}
Rectangle anchor = parent.getAnchor();
float scale = (float)anchor.width/wmfStore.getWidthPixels();
org.apache.batik.transcoder.wmf.tosvg.WMFPainter painter =
new
org.apache.batik.transcoder.wmf.tosvg.WMFPainter(wmfStore, 0, 0,
scale);
graphics.translate(anchor.x, anchor.y);
painter.paint(graphics);
}
}
I didn't research it deeply. Try to play with the Batik classes.
5. Add the following line before rendering:
PictureData.setImagePainter(Picture.WMF, new WMFImagePainter ());
6. Subsequent calls of Slide.draw(Graphics gr) will use
WMFImagePainter for WMF images and
you should see WMF in the generated images. Let me know about your
results.
Regards,
Yegor
Thank you, I greatly appreciate all of your time and help.
Travis
Yegor Kozlov wrote:
That sounds quite interesting, actually. Where do I start? I've
checked
out the various .draw() methods. I am not sure what shape.draw()
is doing though, it appears to just be calling the log() method
in POILogger.
OK. I will find time this weekend to review the code and prepare a
"how to" for you.
Yegor
Travis
Yegor Kozlov wrote:
In ppt slides equations are embedded OLE objects. Each OLE object
consists of two parts:
- snapshot in WMF format. This is what needs to be rendered.
- the actual binary OLE data. This part is activated by double-
click.
Since rendering of WMF is not supported by JDK, the equations
don't
appear in the created images.
In next versions of HSLF I plan to use Batik http://xmlgraphics.apache.org/batik/
which
includes a WMF transcoder:
http://xmlgraphics.apache.org/batik/javadoc/org/apache/batik/transcoder/wmf/tosvg/WMFPainter.html
If you feel like researching this subject, I can explain how to
extend HSLF code to use third-party image renderers.
Yegor
Is there a similar situation with equations made using the
equation editor? I have a presentation where many of the slides
have equation object in them that do not appear in the images
created from slide.draw().
Thanks,
Travis
Yegor Kozlov wrote:
This kind of background is not yet supported. In particular,
HSLF
does not support gradient fills and texture fills. I will see
if I can
include this support in poi-3.1-final.
Yegor
I am having an issue with the powerpoint at http://cs.unm.edu/~massless/test3.ppt
. When I dump all the slides to image files (png or jpg)
there is no background for any of the slides except the first
and last. Is there something extra I need to do to get
slide.draw() to render these slides?
Thanks
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]