1. 程式人生 > >com4j學習(1):Java操作Visio之Java讀取Visio圖形關係並存儲到XML檔案中

com4j學習(1):Java操作Visio之Java讀取Visio圖形關係並存儲到XML檔案中

前言:

MicroSoft Visio是微軟旗下一款非常非常出色的繪圖軟體,可以用來繪製各種各樣的圖形(如流程圖、UML、工程圖等)。現在有這樣一個需求,我們想讀取visio中的圖形的形狀、屬性、連線關係等到程式中(java、c++、python都行),這樣我們就可以將Visio中的圖形之間存在的關係以其他的形式(XML、JSON等)進行儲存。這樣一來,就擴充套件了Visio的功能,不僅能得到圖形檔案,還能得到XML等其他資料儲存格式。本文采用Java的com4j庫來實現我們的需求。

並且你要學會如何自定義圖形,參考部落格:如何自定義形狀

正文:

現在我們一步一步搭建開發環境。

一、安裝JDK,Eclipse這些必要工具。本文不再贅述。

二、安裝Visio,本文使用的是2013版本。

四、上面下載了必要的開發工具後,接下來一步很重要,使用com4j生成visio介面(即需要和本地visio繫結)
4.1 解壓第三步下載的com4j包,將args4j-2.0.1.jar,tlbimp.jar,com4j.jar放到本機JDK的bin目錄下。

4.2 安裝好Visio後找到VISLIB.DLL檔案路徑,例如:D:\software\visio2013\VISLIB.DLL

4.3 cmd進入JDK安裝bin目錄,執行以下命令:
java -jar tlbimp.jar -o visio -p VisioTool "D:\software\visio2013\VISLIB.DLL"


執行之後在JDK的bin目錄出現一個名為visio的資料夾。這是一套操作visio的類庫。

4.5 將4.3中的visio資料夾和4.1的3個jar檔案和4.4中的dom4j檔案,匯入到我們的java工程中,就可以開始程式設計了。

五、來看一個例項,先在visio中隨便畫一個圖,然後執行下面程式碼,注意:執行程式碼的時候要關閉visio。

package com.jimmy.test;

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

import org.dom4j.Document;
import org.dom
4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.XMLWriter; import VisioTool.*; public class TestMain { public static void main(String[] args) { // TODO Auto-generated method stub String filePath = "D:\\JavaProject\\Test1\\input3.vsdx"; 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("寬:", "" + ((int) (page.pageSheet().cells("PageWidth").resultIU() * 96))); root.addAttribute("高:", "" + ((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) { } } }

總結:

至此,我們已經搭建起com4j的java開發visio的環境,接下來會慢慢深入visio圖形的屬性。

相關推薦

com4j學習1Java操作VisioJava讀取Visio圖形關係並存XML檔案

前言: MicroSoft Visio是微軟旗下一款非常非常出色的繪圖軟體,可以用來繪製各種各樣的圖形(如流程圖、UML、工程圖等)。現在有這樣一個需求,我們想讀取visio中的圖形的形狀、屬性、連線關係等到程式中(java、c++、python都行),這樣我

git操作總結1常用操作流程SSH、上傳、下載和改名字

一、配置SSH免金鑰登陸 1.生成金鑰 直接回車3-5次 ssh-keygen -t rsa -C "這裡換上你的郵箱" 2.在指定的儲存路徑下會生成2個名為id_rsa和id_rsa.pub的檔案 3.將id_rsa.pub檔案,把內容拷貝到Git的SSH金鑰配置上 4.g

Java虛擬機器學習1體系結構 記憶體模型

JVM記憶體區域模型 1.方法區 也稱”永久代” 、“非堆”,  它用於儲存虛擬機器載入的類資訊、常量、靜態變數、是各個執行緒共享的記憶體區域。預設最小值為16MB,最大值為64MB,可以通過-XX:PermSize 和 -XX:MaxPermSize 引數限制方法區的大小。

java演算法知識點解析1字串操作

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; public class main {       static

ArcGIS API for JavaScript學習1第一個地圖

樣式表 參數 資源 charset 底層 arcgis 順序 api navi 1.簡介 ArcGIS API for JavaScript跟隨ArcGIS 9.3同時發布,是ESRI根據JavaScript技術實現的調用ArcGIS Server REST API接口的一

facets學習1什麽是facets

遺失 air 不同的 無縫切換 over 快速 後來 樣式 觀察 ML 數據集可以包含數億個數據點,每個數據點由數百(甚至數千)的特征組成,幾乎不可能以直觀的方式了解整個數據集。為幫助理解、分析和調試 ML 數據集,谷歌開源了 Facets,一款可視化工具。 Facets

C++學習1最大子段和多種解法

多少 問題: code namespace 數據 組成 amp using () 問題:給定由n個數(可能為負數)組成的序列a1,a2,a3,...,an,求該序列子段和的最大值。 第一種解法:(最容易考慮的方法,將所有的子段一一相加,然後比較) 1 #include&

Netty學習1Channel的概念

1. Channel Channel是Netty的核心概念之一,它是Netty網路通訊的主體,由它負責同對端進行網路通訊、註冊和資料操作等功能。 1.1 工作原理 如上圖所示: 一旦使用者端連線成功,將新建一個channel同該使用者端進行繫結 channel從EventL

ADB 學習1adb devices 命令

一、前言         關於環境搭建問題,這裡就不在寫了,之前在上一篇 monkey 環境搭建中,寫的也比較詳細,點選傳送門         因為monkey這個工具在執行時就是通過adb這個命令來與我們的

Jenkins 學習1Windows系統下安裝

一、jenkins是什麼?         還是小白,先放個連結:https://blog.csdn.net/ios_xumin/article/details/78125913   二、下載jenkins   &nbs

three.js學習1

1.three.js是: three.js是用JavaScript編寫的WebGL第三方庫。官網(www.threejs.org) 2.three.js功能: three.js 是一款執行在瀏覽器中的 3D 引擎,你可以用它建立各種三維場景,包括了攝影機、光影、材質等各種物件。 3.thre

C#程式設計學習04基本操作學習總結

一、對話方塊窗體的設計 (1)修改exe圖示:專案-->右鍵-->屬性-->應用程式-->圖示和清單-->圖示,選擇要新增的圖示 (2)修改對話方塊圖示: 點選對話方塊 --> 屬性 --> ICON (3)固定對話方塊大小:點選對話方塊

MATLAB神經網路學習1單層感知器

   單層感知器由一個線性組合器和一個二值閾值元件組成。   輸入是一個N維向量 x=[x1,x2,...,xn],其中每一個分量對應一個權值wi,隱含層輸出疊加為一個標量值:                          隨後在二值閾值元件中對得到的v值進行判斷,產生二值輸出:    

計算機軟體技術基礎的學習1資料結構

本文為大三下學習《計算機軟體技術基礎》的知識點一、------------資料結構:研究非數值運算(資料元素之間的關係)的程式設計------------------------------------(1)線性表:            順序儲存和鏈式儲存         

pyCUDA教程-系列學習1GPU結構、pyCUDA、numbapro安裝及HelloGPU例子

GPU結構CPU v.s. GPU CPU是被設計用來處理複雜任務的,而GPU只能做好一件事-處理百萬級的低階任務(原來是被用來生成3D圖形中的三角形),而且GPU有上千個ALU(算術邏輯單元),而CPU通常只有8個。而且很多程式大部分時間都花在GPU擅長的簡單運算上了,所

Spring學習1控制反轉IoC和依賴注入DI的詳解以及註解annotation開發入門案例

前言 以往的java學習中,我們要想得到一個物件,就把它new出來。如:Apple apple = new Apple(); 在一些複雜的系統中,一個物件A可能依賴於物件B,C等(程式碼表現為A類持有B,C類的物件作為A類的屬性)。以往來說,我們想要使用B,

OpenFace學習1安裝配置及人臉比對

前言 前幾天在網上看到了openface(連結),覺得挺有趣就下載配置了一下,稍微修改了一下跑了個demo,效果還是很不錯的。這裡分享下安裝配置的過程以及demo。 簡介 環境搭建 我只是在筆記本上搭建了環境所以涉及到GPU的CUDA驅動的部

GitHub學習基礎操作

    在學習Python一段時間後,發現越來越多的程式程式碼都儲存在一個叫Github的網站裡面,好奇心驅使下去看了下這個東西,聽完介紹,感覺是個很好用的東西,大概的看了下廖雪峰老師的教程,然後就沒有管了,在我的思想裡面,檔案備份還是U盤加壓縮包好用,簡單方

MyBatis學習1Mybatis使用詳解和入門案例

前言 MyBatis和Hibernate一樣,是一個優秀的持久層框架。已經說過很多次了,原生的jdbc操作存在大量的重複性程式碼(如註冊驅動,建立連線,建立statement,結果集檢測等)。框架的作用就是把這些繁瑣的程式碼封裝,這樣可以讓程式設計師專注於sq

Docker學習1在Ubuntu下安裝Docker和關於容器的常用命令

一、Docker的安裝條件   1.執行64位CPU架構的計算機,Docker目前不支援32位CPU;   2.建議採用Linux3.8或更高版本的核心;   3.核心必須支援一種適合的儲存驅動