为已有的Java图形程序增加储存WMF矢量文件功能

原创 2002年05月02日 10:18:00

Java提供了将图形转储为jpg格式的功能, 但这种格式不是矢量格式,没办法在word等软件中修改,编辑。

word中的矢量图形格式是wmf(Windows Meta File)。这种格式主要由一个或两个information headers组成,结构如下:

typedef struct _WindowsMetaHeader
{
WORD FileType; /* Type of metafile (0=memory, 1=disk) */
WORD HeaderSize; /* Size of header in WORDS (always 9) */
WORD Version; /* Version of Microsoft Windows used */
DWORD FileSize; /* Total size of the metafile in WORDs */
WORD NumOfObjects; /* Number of objects in the file */
DWORD MaxRecordSize; /* The size of largest record in WORDs */
WORD NumOfParams; /* Not Used (always 0) */
} WMFHEAD;

除了headers之外下面就是文件记录(Standard Metafile Records)。结构如下:

typedef struct _StandardMetaRecord
{
DWORD Size; /* Total size of the record in WORDs */
WORD Function; /* Function number (defined in WINDOWS.H) */
WORD Parameters[]; /* Parameter values passed to function */
} WMFRECORD;
也就是说每一个record中储存的是Windows GDI绘图函数的代码及每个函数对应的参数.这样的
话整个wmf文件就由这样的函数编码与参数组成。就像下面这样:
Record NameFunction Number
AbortDoc0x0052
Arc0x0817
Chord0x0830
DeleteObject0x01f0
Ellipse0x0418
...
了解了wmf文件的格式,我们就清楚我们如何将我们的图形储存为wmf格式了。我们知道在
JAVA中所有的绘图操作都是通过Graphics来完成的。基本上Graphics中的每一个绘图函数
在Windows GDI中都有对应,我们只需继承一个Graphics类,重载它的每一个方法,转成
对应的Windwos GDI函数,就可以达到我们的目的了。
Graphics中的函数很多,工作量巨大,不用怕,网上已有人写好了,大家请到:
http://piet.jonas.com去下载一个WMFWriter吧。
下载后,将它加到classpath,再请使用我写的这个类,轻松的将你的图形存为wmf格式:
/**
* Copyright:    Copyright (c) 2002
 * Company:
 * @author Turbo Chen

 * @version 1.0



 */

public class WMFWriter
{
    /** comp是你的图形所在的JComponent,out是你指定的输出流


    public void write(JComponent comp, OutputStream out) throws Exception
    {
        try
        {
            int w = comp.getSize().width;
            int h = comp.getSize().height;
            WMF wmf = new WMF();
            WMFGraphics wmfgraphics = new WMFGraphics(wmf, w, h);
            comp.paint(wmfgraphics);
            wmf.writePlaceableWMF(out, 0, 0, w, h, Toolkit.getDefaultToolkit().getScreenResolution());
            wmfgraphics.dispose();
            out.close();
        }
        catch(Exception exception)
        {
            throw new Exception("GRAPHICS ERROR,CAN NOT CREATE WMF FORMAT");
        }
    }

}
 
 
 
 
 
 
 

java wmf格式图片转png

-下载所需jar包:http://pan.baidu.com/s/1eSExTsQ -1.新建工具类import java.io.ByteArrayInputStream; import java....
  • forever_ss
  • forever_ss
  • 2016年06月02日 16:34
  • 1634

poi解析word文档(解析表格,emf,wmf,svg转jpg图片)

POI解析word文档 poi解析word的表格:   提前先准备需要的jar包:   org.apache.poi poi 3.13 ...
  • www1056481167
  • www1056481167
  • 2017年02月24日 11:09
  • 1694

使用IPicture接口读取和显示BMP,GIF,JPG,ICO,EMF,WMF图像

使用IPicture接口读取和显示BMP,GIF,JPG,ICO,EMF,WMF图像http://www.tongyi.net/develop/C/1007434.html问题的起源 很久以来,我都被...
  • lyl_98
  • lyl_98
  • 2007年02月07日 21:46
  • 2049

Java-图片格式

Java图片格式这两天在处理网络图片数据时,需要对不同格式的图片采用不用的处理办法,这就需要掌握图片的格式识别。结合这两天的学习内容,对其进行总结,以备将来不是之需。通过 url常见的图片格式有jpg...
  • lionel_fengj
  • lionel_fengj
  • 2016年12月02日 23:26
  • 429

wmf格式自动转换为jpg或png图片

  • 2016年07月13日 16:35
  • 3.01MB
  • 下载

doc/docx转html,以及wmf与emf转jpg,png图片

  • 2014年12月26日 17:49
  • 20.47MB
  • 下载

wmf文件与emf文件

平是要输出矢量文件,都选择“wmf”格式,后来用FreeMind没有wmf只有emf,输出后效果看起来差不多??有必要了解一下: 1、WMF:Windows 图元文件 “Windows 图元文件...
  • tangzhongxin
  • tangzhongxin
  • 2009年08月26日 10:51
  • 2365

file的读取

涉及到一个bug,关于文件如何读取,记录下来,恩char* szFileName = _tempnam( _DNTN("c:/temp"), _DNTN("CustomThunbnail"));if(...
  • xqtyler
  • xqtyler
  • 2005年12月19日 17:28
  • 1036

java处理word公式(wmf格式转换成svg)

把word转化成html后,里面的公式的格式为.wmf格式,在浏览器中不能显示,故我把wfm格式转化成svg格式,这样就能在浏览器中显示了 需要第三方jar包:wmf2svg-0.9.6.jar ...
  • qq_22498277
  • qq_22498277
  • 2016年11月15日 15:00
  • 1365

将WMF图片格式转换成PNG

  • 2015年08月04日 15:07
  • 3.06MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:为已有的Java图形程序增加储存WMF矢量文件功能
举报原因:
原因补充:

(最多只允许输入30个字)