C#进行Visio二次开发之文件导出及另存Web页面

原文:C#进行Visio二次开发之文件导出及另存Web页面

在我前面很多关于Visio的开发过程中,介绍了各种Visio的C#开发应用场景,包括对Visio的文档、模具文档、形状、属性数据、各种事件等相关的基础处理,以及Visio本身的整体项目应用,虽然时间过去很久,不过这些技术依旧还在使用中,最近应客户培训的需要,我对所有的内容进行了重新整理,把一些没有介绍的很详细或者很少的内容进行了丰富,因此本文介绍的主题-Visio二次开发之文件导出及另存Web页面,介绍一下Visio文件另存为其他几种格式的处理,以及另存为Web文件等相关操作。

1、Visio导出为PDF格式

在一般情况下,PDF格式是较为常用的内容格式,因此Visio文档(Vsd格式)导出为PDF也是很常见的一件事情,Office文档本身很好支持PDF格式的输出,因此对于Visio来说,也不是什么难事,基本上利用它现有的API就可以导出为PDF格式了。

在Visio的Document文档对象中,就有ExportAsFixedFormat这个方法,可以导出为PDF或者XPS的格式的,这个格式有很多参数,用来确定导出那页,以及格式等设置。

expression.ExportAsFixedFormat(FixedFormat, OutputFileName, Intent, PrintRange, FromPage, ToPage, ColorAsBlack, IncludeBackground, IncludeDocumentProperties, IncludeStructureTags, UseISO19005_1, FixedFormatExtClass)

同时,这些参数的相关说明如下所示。

Name Required/Optional Data Type Description
FixedFormat Required VisFixedFormatTypes The format type in which to export the document. See Remarks for possible values.
OutputFileName Optional String The name and path of the file to which to output, enclosed in quotation marks.
Intent Required VisDocExIntent The output quality. See Remarks for possible values.
PrintRange Required VisPrintOutRange The range of document pages to be exported. See Remarks for possible values.
FromPage Optional Long If PrintRange is visPrintFromTo , the first page in the range to be exported. The default is 1, which indicates the first page of the drawing.
ToPage Optional Long If PrintRange is visPrintFromTo , the last page in the range to be exported. The default is -1, which indicates the last page of the drawing.
ColorAsBlack Optional Boolean True to render all colors as black to ensure that all shapes are visible in the exported drawing. False to render colors normally. The default is False.
IncludeBackground Optional Boolean Whether to include background pages in the exported file. The default is True.
IncludeDocumentProperties Optional Boolean Whether to include document properties in the exported file. The default is True.
IncludeStructureTags Optional Boolean Whether to include document structure tags to improve document accessibility. The default is True.
UseISO19005_1 Optional Boolean Whether the resulting document is compliant with ISO 19005-1 (PDF/A). The default is False.
FixedFormatExtClass Optional [UNKNOWN] A pointer to a class that implements the IMsoDocExporter interface for purposes of creating custom fixed output. The default is a null pointer.

 我们在代码里面导出PDF如下所示。

            SaveFileDialog dlg = new SaveFileDialog();
            dlg.FileName = "";
            dlg.Filter = "Pdf文件 (*.pdf)|*.pdf|AutoCAD 绘图 (*.dwg)|*.dwg|所有文件(*.*)|*.*";
            dlg.FilterIndex = 1;
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                if (dlg.FileName.Trim() != string.Empty)
                {
                    VisDocument.ExportAsFixedFormat(Visio.VisFixedFormatTypes.visFixedFormatPDF,
                        dlg.FileName,
                        Visio.VisDocExIntent.visDocExIntentScreen,
                        Visio.VisPrintOutRange.visPrintAll,
                        1, VisDocument.Pages.Count, false, true, true, true, true,
                        System.Reflection.Missing.Value);
                }
            }

这样,我们通过指定PDF格式,以及导出文件名,以及起止页码等信息后,就可以顺利导出对应的Visio文档了,这种方式导出的Visio文档,效果非常好,可以放大到最大清晰都很好的。

 

2、Visio另存为CAD格式

Visio和CAD之间是比较好的兼容模式的,Visio和CAD本身都是基于矢量图形的绘制,因此转换为CAD在继续进行编辑也是很常见的事情,因此在较早时期,Visio本身就对CAD格式(dwg格式)就提供了很好的支持,它可以通过下面代码进行CAD格式的导出。

            SaveFileDialog dlg = new SaveFileDialog();
            dlg.FileName = "";
            dlg.Filter = "AutoCAD 绘图 (*.dwg)|*.dwg|所有文件(*.*)|*.*";
            dlg.FilterIndex = 1;
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                if (dlg.FileName.Trim() != string.Empty)
                {
                    VisApplication.ActivePage.Export(dlg.FileName);
                }
            }

如果CAD文件顺利导出,那么会有一个日志文件提示用户操作的结果的,如下所示。

Visio还可以导出为JPG格式,这个和CAD操作类似,都是通过Page对象的Export方法进行导出,操作代码如下所示。

            SaveFileDialog dlg = new SaveFileDialog();
            dlg.FileName = "";
            dlg.Filter = "JPEG文件 (*.jpg)|*.jpg|所有文件(*.*)|*.*";
            dlg.FilterIndex = 1;
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                if (dlg.FileName.Trim() != string.Empty)
                {
                    VisApplication.ActivePage.Export(dlg.FileName);
                }
            }

虽然这个导出的JPG格式,也是比较不错的,不过相对PDF的矢量效果来说,JPG放大的话,一般来说没有PDF格式那么清晰,但总体效果也还是可以。

 

3、Visio文档另存Web页面

对于Visio文档的另存为Web页面的操作,就没有上述几个方法那么简单了,一般需要更加复杂一点的处理方式。

虽然对于Visio文档来说,在IE上可以通过ActiveX的Visio Viewer来进行查看,不过其他浏览器都不支持,因此对于另存为Web页面的文件,这种方式显得比较通用一些,可以在各个浏览器上查看HTML页面,里面就包含了对Visio文件的显示了。

Visio的文档另存为Web页面的操作,主要思路是利用Application对象的SaveAsWebObject属性,并通过VisWebPageSettings对象进行一些导出属性的设置,如页面范围,文档分辨率等属性设置,以及是否在完成后使用浏览器打开文件等设置。

如获得对象的操作如下所示。

                // 获取文档的Application对象
                targetApplication = targetDocument.Application;

                // 获取并转换SaveAsWebObject对象
                saveAsWebAddon = (VisSaveAsWeb)targetApplication.SaveAsWebObject;

                // 获取保存Web页面的参数设置对象
                saveAsWebSetting = (VisWebPageSettings)saveAsWebAddon.WebPageSettings;

通过获得页面参数对象,我们可以设定导出的起始页面,如下所示。

                    saveAsWebSetting.StartPage = startPage;
                    saveAsWebSetting.EndPage = endPage;

然后在绑定到具体导出的文档里面就确定对应导出的文档了。

                //使用AttachToVisioDoc指定那个文档作为保存页面的对象
                saveAsWebAddon.AttachToVisioDoc(targetDocument);    

为了提高导出Web页面的Visio清晰度,我们需要设置文档的显示比例,如下所示为使用源格式大小。

                //设置其中的相关参数
                saveAsWebSetting.DispScreenRes = VISWEB_DISP_RES.resSource;//显示比例

这个VISWEB_DISP_RES里面有很多参数可以设置的。

Constant Value Description

resSource


0


Use resolution of the source image for output.


res180x260


1


180 x 260 pixels


res544x376


2


544 x 376 pixels


res640x480


3


640 x 480 pixels


res720x512


4


720 x 512 pixels


res768x1024


5


768 x 1024 pixels


res800x600


6


800 x 600 pixels


res1024x768


7


1024 x 768 pixels


res1152x882


8


1152 x 882 pixels


res1152x900


9


1152 x 900 pixels


res1280x1024


10


1280 x 1024 pixels


res1600x1200


11


1600 x 1200 pixels


res1800x1440


12


1800 x 1440 pixels


res1920x1200


13


1920 x 1200 pixels


resINVALID


14


Reserved.

 

另外还有一个参数确定是批处理方式(静默方式)还是完成后通过浏览器打开文件的方式,如下所示。

                //判断是否为批处理模式
                if ((flags & RunInBatchMode) != 0)
                {
                    // 如果为批处理模式,那么浏览器窗口不会自动打开
                    saveAsWebSetting.OpenBrowser = 0;
                    saveAsWebSetting.SilentMode = 1;
                }
                else
                {
                    // 否则保存完毕后打开对应给的浏览器显示文件
                    saveAsWebSetting.OpenBrowser = 1;
                    saveAsWebSetting.QuietMode = 1;
                }

如果一切顺利,那么通过方法直接创建页面就可以了,如下所示。

saveAsWebAddon.CreatePages();// 创建页面

以上的方法处理,我们一般封装在一个类里面,方便调用处理,那么在界面上,我们处理的方法就可以简单化一些。

            var fileName = System.IO.Path.Combine(System.Environment.CurrentDirectory, "test.html");

            var success = SaveAsWebApi.SaveDocAsWebPage(this.axDrawingControl1.Document, -1, -1, fileName,
                SaveAsWebApi.ShowPropertiesWindow | SaveAsWebApi.ShowNavigationBar |
                SaveAsWebApi.ShowSearchTool | SaveAsWebApi.ShowPanAndZoom);

            MessageBox.Show(success ? "成功生成Web文件" : "生成Web文件操作失败");

 最后,我们就可以在各个浏览器里面查看相关的Visio文件了,这种方式比Visio Viewer的处理更通用,效果也很不错哦。

 

时间: 2024-09-27 16:48:29

C#进行Visio二次开发之文件导出及另存Web页面的相关文章

C#进行Visio二次开发之知识点考核试题

本人做过多年的Visio二次开发,根据个人的经验总结及项目积累,写了一些小小的随笔文章(具体可参考<伍华聪的Visio二次开发文章>,上月有幸给深圳一个团队做了两天的Visio培训,当了一回客座老师,重新拉起Visio二次开发这面大旗,个人觉得这也是一次比较难忘的一次经历. 本次准备的培训,除了全面介绍Visio的相关知识和概念,还以实战开发的方式加深Visio二次开发的知识掌握,另外还通过试题来考核各个学生的掌握情况,本文主要是介绍我根据自己一直以来的Visio开发经验所得,准备的Visio

如何使用C#进行Visio二次开发-总结版

很久没有写C#进行Visio二次开发的文章了,这次温习一下Visio二次开发的相关知识,全面总结一下Visio 二次开发的方方面面.一方面让对Visio的开发不太了解人员有一个全局的认识,对已经看过我前面文章的人来一个回顾总结. 本次主要根据我在Visio二次开发过程中,获得的一些实际系统开发经验以及学习历程,分三个方面对下面内容进行介绍: 1)介绍C#的Visio二次开发管理系统的架构设计思路 2)介绍C#进行Visio开发的准备工作 3)Visio的编程对象模型 1)Viso二次开发管理系统

如何使用C#进行Visio二次开发

    Visio在VB6中的开发有很多现成的项目及代码,但在.NET领域相对比较滞后,但是从Visio SDK2007发布以来,给予Visio的C#开发逐渐多了起来,虽然和VB6的开发思路有一定的相似,不过平台不一样,做出来的东西差别还是有一定的距离,虽然总体慢一点,但是,DotNET框架的逐渐强大以及更多的DotNet程序和开发人员的加入,带给大家更高的整合价值以及更美好的发展未来.     本人将会在C#领域将Visio的二次开发进行下去,希望大家一起学习研究,碰撞出更美的火花 Visio

C#进行Visio二次开发之界面设计及架构设计

写C#进行Visio二次开发的系列文章有很多篇了,都是写一些经验总结和技术知识的分享,本文继续来探讨这方面开发的一些心得,主要介绍下WinForm界面的设计和Visio软件的架构设计.先看看我花了N个月的业余时间完成的软件概貌,然后大家一起讨论下相关的技术知识. 软件界面主要有菜单区.工具条区.图纸内容区.右边的管理区.状态条区等等,主要注意的是采用了ToolStripPanel来进行布局,然后并使用了有名的WeifenLuo.WinFormsUI.Docking.dll控件对图纸内容区.右边的

C#进行Visio二次开发之自定义右键菜单

Visio Drawing Control中集成自定义菜单是很多项目必须的,很多朋友也问 过我如何实现这些菜单,下面介绍下Visio自定义菜单的实现. Visio二次 开发中,为Visio Drawing Control添加自定义菜单有两种方式:一种是使用捕捉 Visio的MouseUpEvent事件,弹出ContextMenu即可:另一种是通过在PageSheet中 增加Action来实现,也就是使用RUNADDONWARGS函数来实现. 两种实现的 效果如下图所示,两者的区别是,使用第二种会

C#进行Visio二次开发之动态仿真实现

Visio二次开发可以实现的项目情景很多,如电气线路分析.配电网络分析.流程图等,现因为项目需要,又认识多了一个应用场合,液压传动的仿真.项目效果图如下所示: 查看原图(大图) 动态仿真,其实也就是模拟实际线路的走向,实现动画的展现.以前我的Visio的项目,基本上都是基于静态的图形展现,并没有设置太多的动态展现.原来配电网络的通电线路的分析,严格来说也是静态的,因为基本上是一次性把通电和不通电的线路给绘制出来.而动态仿真则要求慢慢的动画展现线路的走向和颜色变化. 如活塞运动的仿真,要求不停止动

C#进行Visio二次开发之组合形状操作

由于一朋友需要Visio实现仿真模拟Demo,因此我在原来Visio项目代码基础上进行改进调整,完成了其需要的功能.现将对原有Visio二次开发项目的创新思路及成果总结一下,以飨读者,也做为一个标志,供日后参考,或者于各位同行,一起研究切磋.先贴图展示整个项目的该款,表明此文章所托并非空穴来风.纸上谈兵! 本人基于项目的Visio的二次开发文章写了很多,其中涉及到各形状方面的操作,但基本上都是做为一个图形的整体来实现各种效果的,由于仿真需要,需要将换向阀实现左右变换功能,而换向阀是一个组合控件,

Visio二次开发(一)----巧用Visio宏

最近做的项目中需要用到Visio二次开发,安装了Visio的SDK,还有从网上找了一些这方面的博客,Visio的SDK是全英文的,看着有点费劲,很多的东西都不知道该如何去找,不过网上的一些博客还是有一些不错的,前两天发现一个有助于Visio二次开发的方法,下面分享给大家. 就是巧用Visio的宏来帮助你进行二次开发,通过Visio宏的录制功能,将你对Visio的具体操作转换成VBA代码,这样你就会知道它的一些具体是怎么实现的了,下面是具体的步骤: 在Visio中右键,选中开发工具 然后再工具栏中

Visio二次开发(二)----Shape的添加和连接

     先说一说为什么我要用到Visio的二次开发,现在做的项目设计到了一些电子地图,下面的这张图片是美工画的一张地铁里面门禁布局图,而这些图在做项目的时候是需要用Visio画的,有提前画好的直接加载到项目中就可以使用,但是有些是需要通过代码也就是二次开发来实现的!      下面说说具体的实现过程:      shape的添加      你只需要找到相应的模板,模板下的形状,就可以加载形状,没有什么困难的,如果你实在不知道,那么就学者去用用Visio宏,对你的学习很有帮助(Visio二次开发