java 操作visio-- com4j方式

标签: java visio com4j | 发表时间:2013-08-13 17:47 | 作者:nieou
出处:http://blog.csdn.net

visio是一款强大的软件,制作各种图表,流程图等,近段时间研究visio摆放平面图,想把平面图中数据保存到数据库中,网上资料极少,研究了很多。特此写下供大家分享!

希望大家多回贴,以此表达尊重和鼓励我的劳动成果。

第一步,下载com4j包 ,可以我的资源里直接下载。

 

第二步,解压缩com4j包,把args4j-2.0.1.jar,tlbimp.jar,com4j.jar放入JDK的bin目录下。


第三步,cmd进入JDK安装目录,运行 java -jar tlbimp.jar -o visio -p test  "D:\Program Files\Microsoft Office\Office14\VISLIB.DLL"。在JDK安装目录出现一套操作visio的类库

你可以省略一二步,在我的资源里下载 visio类库。

第四步,操作visio.看代码

 

import java.io.FileWriter;
import java.io.IOException;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;

public class VisioMain {
 
 public static void main(String[] args){
  String filePath = "C:\\network.vsd";
  String outputDir = filePath + ".output";
  // 创建Visio对象
  IVApplication app = ClassFactory.createApplication();
  // Visio对象设置为可见
  app.visible(true);
  // 打开一个Visio文件
  IVDocument doc = app.documents().open(filePath);
  // 创建一个Dom4j类型的Document对象
  Document xmlDoc = DocumentHelper.createDocument();
  Element root = xmlDoc.addElement("page");
  try {
  // 只读取Visio文档中第一个页面的信息
   IVPage page = doc.pages().itemFromID(0);
  // 读取Page对象的长和宽,并转化为像素单位(乘以96)
   root.addAttribute("width", "" + ((int) (page.pageSheet().cells("PageWidth").resultIU() * 96)));
   root.addAttribute("height", "" + ((int) (page.pageSheet().cells("PageHeight").resultIU() * 96)));
   IVShapes shapes = page.shapes();
   System.out.println("shapes="+shapes.count());
  // 遍历该Page对象中所有的Shape对象
   for (int shapeCount = 1; shapeCount <= shapes.count(); shapeCount++) {
    IVShape shape = shapes.itemU(shapeCount);
   
    String shapeId = shape.text();
    System.out.println("shapeName="+shape.name());
    System.out.println("PinX="+shape.cells("PinX").resultIU()*25.4);
   // System.out.println("自定义属性="+shape.cellsU("Prop.equ").result(new String()));
    
   // 找出被我们事先标识了的Shape对象进行进一步处理
    if (shapeId.length() > 0) {
    // 在page元素下面新建一个shape元素
     Element shapeElement = root.addElement("shape");
    // 为shape元素添加id,height,width,x,y等属性
     shapeElement.addAttribute("id", shapeId);
     shapeElement.addAttribute("height", "" + ((int) (shape.cells("Height").resultIU() * 96)));
     shapeElement.addAttribute("width", "" + ((int) (shape.cells("Width").resultIU() * 96)));
     shapeElement.addAttribute("x", "" + ((int) (shape.cells("PinX").resultIU() * 96)));
     shapeElement.addAttribute("y", "" + ((int) (shape.cells("PinY").resultIU() * 96)));
     shape.text("");
     shape.export(outputDir + "\\" + shapeId + ".gif");
    }
   }
   doc.saved(true);
  }finally {
   doc.close();// 关闭打开的文件
   app.quit();// 退出Visio应用程序
  }
  try {
  // lets write to a file
   XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
   writer.write(xmlDoc);
   writer.close();
  }catch (IOException e) {
  
  }
 }
}

作者:nieou 发表于2013-8-13 17:47:54 原文链接
阅读:86 评论:0 查看评论

相关 [java visio com4j] 推荐:

java 操作visio-- com4j方式

- - CSDN博客研发管理推荐文章
visio是一款强大的软件,制作各种图表,流程图等,近段时间研究visio摆放平面图,想把平面图中数据保存到数据库中,网上资料极少,研究了很多. 希望大家多回贴,以此表达尊重和鼓励我的劳动成果. 第一步,下载com4j包 ,可以我的资源里直接下载. 第二步,解压缩com4j包,把args4j-2.0.1.jar,tlbimp.jar,com4j.jar放入JDK的bin目录下.

Dia-Visio的免费替代品

- 海坡 - Wow! Ubuntu
Dia是一款跨平台的类Visio工具,使用GTK+编写,以GPL协议发布. 使用Dia可以创建多种类型的图标,如流程图,UML图,实体关系图. 虽然没有Vision众多的模板,但Dia基本上包含了常用的模板. Dia可以将图标保存为常见的文件类型,如PNG,WMF,SVG,XFIG,EPS,支持打印.

Java中的锁(Locks in Java)

- - 并发编程网 - ifeve.com
原文链接 作者:Jakob Jenkov 译者:申章 校对:丁一. 锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂. 因为锁(以及其它更高级的线程同步机制)是由synchronized同步块的方式实现的,所以我们还不能完全摆脱synchronized关键字( 译者注:这说的是Java 5之前的情况).

Java PaaS 对决

- 呆瓜 - IBM developerWorks 中国 : 文档库
本文为 Java 开发人员比较了三种主要的 Platform as a Service (PaaS) 产品:Google App Engine for Java、Amazon Elastic Beanstalk 和 CloudBees RUN@Cloud. 它分析了每种服务独特的技术方法、优点以及缺点,而且还讨论了常见的解决方法.

Java浮点数

- d0ngd0ng - 译言-电脑/网络/数码科技
Thomas Wang, 2000年3月. Java浮点数的定义大体上遵守了二进制浮点运算标准(即IEEE 754标准). IEEE 754标准提供了浮点数无穷,负无穷,负零和非数字(Not a number,简称NaN)的定义. 在Java开发方面,这些东西经常被多数程序员混淆. 在本文中,我们将讨论计算这些特殊的浮点数相关的结果.

Qt——转战Java?

- - 博客 - 伯乐在线
编者按:事实上,在跨平台开发方面,Qt仍是最好的工具之一,无可厚非,但Qt目前没有得到任何主流移动操作系统的正式支持. 诺基亚的未来计划,定位非常模糊,这也是令很多第三方开发者感到失望,因此将导致诺基亚屡遭失败的原因. Qt的主要开发者之一Mirko Boehm在博客上强烈讽刺Nokia裁了Qt部门的决定,称其为“绝望之举”,而非“策略变更”.

java 验证码

- - ITeye博客
// 创建字体,字体的大小应该根据图片的高度来定. // 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到. // randomCode用于保存随机产生的验证码,以便用户登录后进行验证. // 随机产生codeCount数字的验证码. // 得到随机产生的验证码数字. // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同.

Java异常

- - CSDN博客推荐文章
“好的程序设计语言能够帮助程序员写出好程序,但是无论哪种语言都避免不了程序员写出坏的程序.                                                                                                                          ----《Java编程思想》.

java面试题

- - Java - 编程语言 - ITeye博客
 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面. 抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节. 抽象包括两个方面,一是过程抽象,二是数据抽象.  继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法. 对象的一个新类可以从现有的类中派生,这个过程称为类继承.

Java使用memcached

- - 互联网 - ITeye博客
首先到 http://danga.com/memcached下载memcached的windows版本和java客户端jar包,目前最新版本是memcached-1.2.1-win32.zip和java_memcached-release_1.6.zip,分别解压后即可. 然后是安装运行memcached服务器,我们将memcached-1.2.1-win32.zip解压后,进入其目录,然后运行如下命令:c:>;memcached.exe -d install
c:>memcached.exe -l 127.0.0.1 -m 32 -d start.