通过JAVA读取Visio


最近做的项目需要将VISIO的数据保存到数据库中,参考网络上的方法以及自己的尝试终于得到了想要获取的数据,

参考资料可参照:http://itindex.net/detail/45235-java-visio-com4j (读取VISIO)

                        http://wenku.baidu.com/view/fdcd512bbd64783e09122b74.html (VISIO图形介绍)


在使用JAVA读取VISIO时需先做好事前准备:

1、准备COM4J包,这个在百度搜索就能搜索到,文件太大了16M没法上传

2、将VISIO转换成JAVA库

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

  2.2 CMD进入JDK的bin目录,执行:java -jar tlbimp.jar -o visio -p test  "D:\Program Files (x86)\Microsoft Office\Office14\VISLIB.DLL"

   生成的java库会在bin目录下生成一个VISIO文件夹,里面就是VISIO的JAVA库,在项目中使用

3、就是:http://itindex.net/detail/45235-java-visio-com4j 这里的代码啦,记住要把VISIO库以及com4j.jar导入到项目中

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;

import test.ClassFactory;
import test.IVApplication;
import test.IVDocument;
import test.IVPage;
import test.IVShape;
import test.IVShapes;
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) { 
   
  } 
 } 
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值