VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1165|回复: 1

关于java 解析visio

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2021-11-16 21:22:48 | 显示全部楼层 |阅读模式
在使用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) {
}

}

}
————————————————
版权声明:本文为CSDN博主「Jasin Yip」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_28866737/article/details/114049921

回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2021-11-25 12:05:02 | 显示全部楼层
零基础怎么学
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表