java visio_java 操作visio-- com4j方式
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方式相关推荐
- com4j学习(1):Java操作Visio之Java读取Visio图形关系并存储到XML文件中
前言: MicroSoft Visio是微软旗下一款非常非常出色的绘图软件,可以用来绘制各种各样的图形(如流程图.UML.工程图等).现在有这样一个需求,我们想读取visio中的图形的形状.属性.连接 ...
- java 操作 ES 的方式 整理总结
一.操作ES 的方式大题有这么三种 1. TransportClinet客户端 2. REST Client 3. SpringDateES 二.第一种 TransportClinet客户端 首先要讲 ...
- java制作oracle程序,Java程序操作Oracle两种方式之简单实现
Java程序操作Oracle两种方式之简单实现 1.通过JDBC-ODBC桥连接Oracle数据库 (1)创建odbc源,在控制面板->管理工具->数据源(odbc)中添加DSN,比如取名 ...
- java 解析/操作 xml 几种常用方式 xml的增加/删除/修改
java 解析/操作 xml 几种常用方式 xml的增加/删除/修改 首先,我们先介绍几种常用的xml解析器. 1. 介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方 ...
- 读取Java文件到byte数组的三种方式及Java文件操作大全(包括文件加密,String加密)
读取Java文件到byte数组的三种方式 package zs;import java.io.BufferedInputStream; import java.io.ByteArrayOutputSt ...
- 一文快速回顾 Java 操作数据库的方式-JDBC
前言 数据库的重要性不言而喻,不管是什么系统,什么应用软件,也不管它们是 Windows 上的应用程序,还是 Web 应用程序,存储(持久化)和查询(检索)数据都是核心的功能. 大家学习数据库时,比如 ...
- Kafka系列三 java API操作
使用java API操作kafka 1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...
- Redis介绍 Java客户端操作Redis
Redis介绍 && Java客户端操作Redis 本文内容 redis介绍 redis的 shell 客户端简介 redis的 java 客户端简介 环境配置 redis 2.8.1 ...
- Redis介绍 Java客户端操作Redis
分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow Redis介绍 & ...
最新文章
- 使用三层架构实现简单的MVC登陆操作!并实现基本的增删改查功能!!
- 求助matlab分解质因数,Matlab
- ZooKeeper 技术内幕,Leader 选举是一个什么样的过程?
- Hadoop权威指南 _02大体目录
- 【Python】浮点数计算时的不准确性以及如何进行精确计算
- 赋值运算符(AssignmentOperator)
- Android判断app是不是第一次启动
- cxfservlet_webService框架CXF的简单使用
- TDR土壤水分检测传感器方案设计
- ai人工智能书籍_您应该阅读的有关AI的精彩书籍
- CTF解题基本思路步骤(misc和web)
- 这些都是无轴螺旋输送机稳定运行的必要条件!
- Android编译打包报错Invalid keystore format
- 我把自己的java库发布到了maven中央仓库,从此可以像Jackson、Spring的jar一样使用它了
- Redis学习笔记(附面试题)
- 用PLSQL给自己发一份邮件
- 成员介绍网页模板html,HTML5 CSS3 SVG团队成员介绍卡片页面模板
- 资料员培训建筑八大员培训建筑资料员工程建筑资料与施工管理
- PrimeTime PX(Power Analysis) userguide阅读笔记
- 管理科学与工程同考大纲
热门文章
- 书评:Pro .NET 4 Parallel Programming in C#
- 首字母筛选 html,筛选七八个关键字
- Android画笔Paint与文字相关的设置
- 【ELM数据预测】基于matlab粒子群算法优化ELM数据预测(含前后对比)【含Matlab源码 449期】
- 基于 Canvas 的 HTML5 工控机柜 U 位动态管理
- 学seo要知道什么代码www.2bsf.com
- EasyDSS如何解决并发过大,磁盘读写跟不上的问题?
- 最小二乘法完成曲线拟合公式
- 牛客竞赛 Youhane Assembler
- oracle查看索引所在表空间及索引重建