使用Apache POI提取WMF文件数据,将其转换为Java2D图像,然后使用Batik将Java2D图像转换为SVG格式。示例代码如下:
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import org.apache.poi.hwmf.record.HwmfRecord;
import org.apache.poi.hwmf.record.HwmfRecordType;
import org.apache.poi.hwmf.usermodel.HwmfPicture;
import org.apache.poi.hwmf.usermodel.HwmfShapeRenderer;
import org.apache.poi.hwmf.usermodel.HwmfTrapezoid;
import org.apache.poi.hwmf.usermodel.HwmfWindowing;
public class WMFConverter {
public static void convert(String inputFilePath, String outputFilePath)
throws Exception {
FileInputStream fis = new FileInputStream(inputFilePath);
HwmfPicture picture = new HwmfPicture(fis,
HwmfWindowing.SCALE_PAGE, false);
Dimension dim = picture.getSize();
BufferedImage image = new BufferedImage(dim.width, dim.height,
BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = image.createGraphics();
HwmfShapeRenderer renderer = new HwmfShapeRenderer(g2d);
for (HwmfRecord record : picture.getRecords()) {
if (record.getRecordType() == HwmfRecordType.polygon) {
HwmfTrapezoid trapezoid = new HwmfTrapezoid();
trapezoid.init(record.getWMFRecord().getData());
renderer.drawPolygon(trapezoid.xPoints, trapezoid.yPoints,
trapezoid.nPoints);
}
}
g2d.dispose();
SVGGraphics2D svg = new SVGGraphics2D(dim.width, dim.height);
svg.drawImage(image, 0, 0, null);
OutputStreamWriter outWriter = new OutputStreamWriter(
new FileOutputStream(outputFilePath), "UTF-8");
svg.stream(outWriter, true /* use css */, true /* escape text */);
}
}
要使用该方法,只需调用WMFConverter.convert(inputFilePath, outputFilePath)并提供输入和输出文件路径即可。