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_java 操作visio-- com4j方式相关推荐

  1. com4j学习(1):Java操作Visio之Java读取Visio图形关系并存储到XML文件中

    前言: MicroSoft Visio是微软旗下一款非常非常出色的绘图软件,可以用来绘制各种各样的图形(如流程图.UML.工程图等).现在有这样一个需求,我们想读取visio中的图形的形状.属性.连接 ...

  2. java 操作 ES 的方式 整理总结

    一.操作ES 的方式大题有这么三种 1. TransportClinet客户端 2. REST Client 3. SpringDateES 二.第一种 TransportClinet客户端 首先要讲 ...

  3. java制作oracle程序,Java程序操作Oracle两种方式之简单实现

    Java程序操作Oracle两种方式之简单实现 1.通过JDBC-ODBC桥连接Oracle数据库 (1)创建odbc源,在控制面板->管理工具->数据源(odbc)中添加DSN,比如取名 ...

  4. java 解析/操作 xml 几种常用方式 xml的增加/删除/修改

    java 解析/操作 xml 几种常用方式 xml的增加/删除/修改 首先,我们先介绍几种常用的xml解析器. 1. 介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方 ...

  5. 读取Java文件到byte数组的三种方式及Java文件操作大全(包括文件加密,String加密)

    读取Java文件到byte数组的三种方式 package zs;import java.io.BufferedInputStream; import java.io.ByteArrayOutputSt ...

  6. 一文快速回顾 Java 操作数据库的方式-JDBC

    前言 数据库的重要性不言而喻,不管是什么系统,什么应用软件,也不管它们是 Windows 上的应用程序,还是 Web 应用程序,存储(持久化)和查询(检索)数据都是核心的功能. 大家学习数据库时,比如 ...

  7. Kafka系列三 java API操作

    使用java API操作kafka 1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...

  8. Redis介绍 Java客户端操作Redis

    Redis介绍 && Java客户端操作Redis 本文内容 redis介绍 redis的 shell 客户端简介 redis的 java 客户端简介 环境配置 redis 2.8.1 ...

  9. Redis介绍 Java客户端操作Redis

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow Redis介绍 & ...

最新文章

  1. 使用三层架构实现简单的MVC登陆操作!并实现基本的增删改查功能!!
  2. 求助matlab分解质因数,Matlab
  3. ZooKeeper 技术内幕,Leader 选举是一个什么样的过程?
  4. Hadoop权威指南 _02大体目录
  5. 【Python】浮点数计算时的不准确性以及如何进行精确计算
  6. 赋值运算符(AssignmentOperator)
  7. Android判断app是不是第一次启动
  8. cxfservlet_webService框架CXF的简单使用
  9. TDR土壤水分检测传感器方案设计
  10. ai人工智能书籍_您应该阅读的有关AI的精彩书籍
  11. CTF解题基本思路步骤(misc和web)
  12. 这些都是无轴螺旋输送机稳定运行的必要条件!
  13. Android编译打包报错Invalid keystore format
  14. 我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了
  15. Redis学习笔记(附面试题)
  16. 用PLSQL给自己发一份邮件
  17. 成员介绍网页模板html,HTML5 CSS3 SVG团队成员介绍卡片页面模板
  18. 资料员培训建筑八大员培训建筑资料员工程建筑资料与施工管理
  19. PrimeTime PX(Power Analysis) userguide阅读笔记
  20. 管理科学与工程同考大纲

热门文章

  1. 书评:Pro .NET 4 Parallel Programming in C#
  2. 首字母筛选 html,筛选七八个关键字
  3. Android画笔Paint与文字相关的设置
  4. 【ELM数据预测】基于matlab粒子群算法优化ELM数据预测(含前后对比)【含Matlab源码 449期】
  5. 基于 Canvas 的 HTML5 工控机柜 U 位动态管理
  6. 学seo要知道什么代码www.2bsf.com
  7. EasyDSS如何解决并发过大,磁盘读写跟不上的问题?
  8. 最小二乘法完成曲线拟合公式
  9. 牛客竞赛 Youhane Assembler
  10. oracle查看索引所在表空间及索引重建