导出visio2007(导出vdx方式)

参照"使用模板导出word"的式完成了导出visio的功能. 这里为自己记录下vdx格式的一些说明。

这里使用的是Visio2007

先粘个网址http://msdn.microsoft.com/en-us/library/aa722456(v=office.12).aspx(关于vdx的所有元素说明都可在这里找到)

1.<PreviewPicture Size="">元素: 缩略图,也就是保存后的文件的图标。其内容是Base64加密的数据,Size是大小。该元素或Size属性均可省略。

2.<StyleSheets>元素: 就像它表示的意思一样,其中定义了一些样式.

2.<Masters>元素: 指明了画布中的元素的默认形式。举例来说话就是: 如果你画了一个"开始"元素到画布中,那么<masters>中必定也会存在一个"开始"元素。而画布中的"开始"元素所没有的属性,默认继承自<masters>中的"开始"元素。

2.1<Master>元素: <Masters>的子元素. 其主要属性Id是一个由0开始的值,UniqueID是类似于UUID的唯一值,Hidden表示此元素是否可见。要注意的是,Id不能与其它<Master>元素值相同。而其它值采用默认就可以了.

它的示例就像下面这样

<Master ID="0" NameU="On-page reference" Name="页面内引用" Prompt="拖到绘图页后,可以创建从一个流程到同一页上另一个流程的超链接。" IconSize="1" AlignName="2" MatchByName="0" IconUpdate="0" UniqueID="{3F8FC4FF-0013-0000-8E40-00608CF305B2}" BaseID="{DF019A75-5602-41B8-8B9D-CC3827DD7E5E}" PatternFlags="0" Hidden="0">

 2.1.1<PageSheet>元素: <Master>的子元素。其说明的是<Master>在页面中属性,打印属性等。其内容一般无须改变。

2.1.2<Shape>元素: <Master> - <Shapes>的子元素。Shape元素的属性与Master基本相同。这里有下面几个主要的部分。

2.1.2.1<XForm>元素: 其定义了图形的x y坐标, 长宽, 以及旋转的中点坐标(好像是)。这里说下其中几个元素的默认取值规则, <PinX><PinY>就是图形的坐标了,默认单位是英寸<Width><Height>就是宽高了。而<LocPinX>与<LocPinY>默认取值为Width/2, Height/2。其实这里的值全取默认值就可以了。后面要说的Page元素才是影响图形显示的元素。

2.1.2.2<TextXForm>元素: 其基本意义与<XForm>意义相似。默认取值方式:TxtPinX=Width*0.5,TxtPinY=Height*0.5, TxtWidth=Width*1, TxtHeight=Height*1, TxtLocPinX=TxtWidth*0.5,  TxtLocPinY=TxtHeight*0.5

2.1.2.3<Connection>元素: 表示元素上的连接点, IX属性是由0开始的值。其坐标是相对于元素本身左下角来计算的。例如画了一个"开始"元素。那么这个元素的左下角将被视为起始点:0,0。而4个连接点的默认值则为

左wdith*0,height*0.5, 右width*1,height*0.5, 下width*0.5, height*0, 上width*0.5, height*1

2.1.2.4<Act>元素: 此元素就定了当右击图形时,弹出出的菜单中除了默认显示的选项外,还会包括此选项

 2.1.2.5<Geom>元素: 此元素说明了图形是如何被画出来的,其记录了画这个图形的轨迹。其中MoveTo表示将点移动到的坐标。而根据图形的类型(形状)不同,其子元素可能会有Line或EllipticalArcTo等不同的元素组成。

2.1.2.6<Text>元素: 就如果字面意思那样,表示图形所显示的文字。

2.1.3<Icon>元素: 此图形的数据。默认即可

masters的主要内容基本就是这些。其实对于masters元素,全部采用默认值即可。

3. Pages元素: 此元素就是画布上的元素以及页的相关信息了。

3.1Page元素: 页信息,其ID也是以0开始的累加值,不可与其它Page的ID相同。其ViewScale, ViewCenterX, ViewCenterY属性分别表示: "显示的比例",以及打开此visio时,用户可见的Page的X坐标与Y坐标

3.1.1PageSheet元素:其意义与上面的一样。但要注意UniqueID属性,其值具有存在意义。

3.1.2Shapes元素: 仍然与上面一样。但这里有两个要注意的Shape.一个是"动态连接线"。"动态连接线"是存在<XForm1D>元素的,表明了线的起点与终点,而一般的动态连接线的Width=EndX-BeginX,

Height=EndY-BeginY,但对横向直线来说,Height却不为0而是一个固定值0.1968503937007874, Geom的LineTo的Y值确是其的一半0.09842519685039441(不知道为什么),而对于纵向直接来说Wdith也是一个固定值0.19685039370079同样的,其LineTo的X值也是其一半0.098425196850395。

而对于像是将一个长方形从中间分开的“动态连接线”就更奇怪了. 如果取其左半部分. BeginX与EndX相同的话,其Width也不是0而是-0.19685039370079,而Geom的MoveTo的X坐标也不是0而是其值一半-0.09842519685039364。最后一个LineTo的X也不是0也是-0.09842519685039364。同样如果取其右半部分,那么就变为正数。同样,如果改为取上下的话,那么改变的就是Y值了。这里真不明白为什么会这样。

这里还有要说明的就是"离页引用"。 离页引用具有类似于下面这样的元素

<User NameU="OPCShapeID" ID="4">
            <Value Unit="STR">{9526744D-44D2-4E82-9CDB-C46AAA5AEDF5}</Value>
            <Prompt V="null"/>
          </User>
          <User NameU="OPCDPageID" ID="5">
            <Value Unit="STR">{4B976237-D1AE-4872-8CDC-D51BB27362FB}</Value>
            <Prompt V="null"/>
          </User>
          <User NameU="OPCDShapeID" ID="6">
            <Value Unit="STR">{191F4FEA-584B-4D6A-BC09-D8E68C86F97E}</Value>
            <Prompt V="null"/>
          </User>
          <Hyperlink NameU="OffPageConnector" ID="1">
            <Description>离页引用(&amp;F)</Description>
            <Address V="null"/>
            <SubAddress>aaa</SubAddress>
            <ExtraInfo V="null"/>
            <Frame V="null"/>
            <NewWindow>0</NewWindow>
            <Default>0</Default>
            <Invisible>0</Invisible>
            <SortKey V="null"/>
          </Hyperlink>

 其中OPCShapeID指向的是其自身的Shape. OPCDShapeID指向的是引用的Shape. 而OPCDPageID指向的是引用的页. OffPageConnector之中的SubAddress指向的是引用的页的name。

3.1.3<Connects>元素:  连接线,其表明哪两个图形相连。例如:

<Connect FromSheet="3" FromCell="BeginX" FromPart="9" ToSheet="2" ToCell="Connections.X3" ToPart="102"/>
		<Connect FromSheet="3" FromCell="EndX" FromPart="12" ToSheet="4" ToCell="Connections.X1" ToPart="100"/>
		<Connect FromSheet="9" FromCell="BeginX" FromPart="9" ToSheet="8" ToCell="Connections.X2" ToPart="101"/>
		<Connect FromSheet="9" FromCell="EndX" FromPart="12" ToSheet="4" ToCell="PinY" ToPart="3"/>
		<Connect FromSheet="13" FromCell="BeginX" FromPart="9" ToSheet="12" ToCell="Connections.X3" ToPart="102"/>
		<Connect FromSheet="13" FromCell="EndX" FromPart="12" ToSheet="8" ToCell="Connections.X3" ToPart="102"/>
		<Connect FromSheet="16" FromCell="BeginX" FromPart="9" ToSheet="15" ToCell="Connections.X2" ToPart="101"/>
		<Connect FromSheet="16" FromCell="EndX" FromPart="12" ToSheet="14" ToCell="Connections.X2" ToPart="101"/>
		<Connect FromSheet="21" FromCell="BeginX" FromPart="9" ToSheet="19" ToCell="Connections.X4" ToPart="103"/>
		<Connect FromSheet="21" FromCell="EndX" FromPart="12" ToSheet="20" ToCell="Connections.X4" ToPart="103"/>
		<Connect FromSheet="23" FromCell="BeginX" FromPart="9" ToSheet="20" ToCell="Connections.X2" ToPart="101"/>
		<Connect FromSheet="23" FromCell="EndX" FromPart="12" ToSheet="22" ToCell="Connections.X2" ToPart="101"/>

 FromSheet, ToSheet就是指当前页的Shape的id了。ToCell的值是就是定义的Connection. 其它具体含义可以参考http://msdn.microsoft.com/en-us/library/aa722456(v=office.12).aspx

猜你喜欢

转载自huohu2005.iteye.com/blog/2070431