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 = ;
if (dlg.ShowDialog() == DialogResult.OK)
{
if (dlg.FileName.Trim() != string.Empty)
{
VisDocument.ExportAsFixedFormat(Visio.VisFixedFormatTypes.visFixedFormatPDF,
dlg.FileName,
Visio.VisDocExIntent.visDocExIntentScreen,
Visio.VisPrintOutRange.visPrintAll,
, 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 = ;
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 = ;
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) != )
{
// 如果为批处理模式,那么浏览器窗口不会自动打开
saveAsWebSetting.OpenBrowser = ;
saveAsWebSetting.SilentMode = ;
}
else
{
// 否则保存完毕后打开对应给的浏览器显示文件
saveAsWebSetting.OpenBrowser = ;
saveAsWebSetting.QuietMode = ;
}
如果一切顺利,那么通过方法直接创建页面就可以了,如下所示。
saveAsWebAddon.CreatePages();// 创建页面
以上的方法处理,我们一般封装在一个类里面,方便调用处理,那么在界面上,我们处理的方法就可以简单化一些。
var fileName = System.IO.Path.Combine(System.Environment.CurrentDirectory, "test.html");
var success = SaveAsWebApi.SaveDocAsWebPage(this.axDrawingControl1.Document, -, -, fileName,
SaveAsWebApi.ShowPropertiesWindow | SaveAsWebApi.ShowNavigationBar |
SaveAsWebApi.ShowSearchTool | SaveAsWebApi.ShowPanAndZoom);
MessageBox.Show(success ? "成功生成Web文件" : "生成Web文件操作失败");
最后,我们就可以在各个浏览器里面查看相关的Visio文件了,这种方式比Visio Viewer的处理更通用,效果也很不错哦。

C#进行Visio二次开发之文件导出及另存Web页面的更多相关文章
- visio二次开发——图纸解析之线段
多写博客,其实还是蛮好的习惯的,当初大学的时候导师就叫我写,但是就是懒,大学的时候,谁不是魔兽或者LOL呢,是吧,哈哈哈. 好了,接着上一篇visio二次开发——图纸解析,我继续写. 摘要: (转发请 ...
- visio二次开发——图纸解析
(转发请注明来源:http://www.cnblogs.com/EminemJK/) visio二次开发的案例或者教程,国内真的非常少,这个项目也是花了不少时间来研究visio的相关知识,困难之所以难 ...
- Revit二次开发-BIM模型导出
最近一个月一直在研究Revit二次开发-BIM模型的导出,在网上找了很多相关资料学习.下面简单介绍一下我最近做的这个BIM模型的导出功能. 开始尝试使用Revit2015的样例程序里提供的读取模型几何 ...
- 基于EasyNVR+EasyDSS H5视频直播二次开发实现业务需求:直接使用播放页面
之前的"网页直播.微信直播技术解决方案:EasyNVR与EasyDSS流媒体服务器组合之区分不同场景下的easynvr"有介绍一些功能.由于客户需求,我们定制一下功能.给该套方案添 ...
- NX二次开发-打开文件夹,并同时选中指定文件
NX9+VS2012 #include <uf.h> #include <uf_ui.h> #include <uf_part.h> #include <at ...
- visio二次开发——图纸解析之形状
今天有空,下班前补齐解析visio图形形状的方法,包含图形背景色.字体颜色.备注信息.形状数据取值. /// <summary> /// 设置形状的选择属性 /// </summar ...
- visio二次开发初始化问题
(转发请注明来源:http://www.cnblogs.com/EminemJK/) 问题: axDrawingControl1初始化失败((System.ComponentModel.ISuppor ...
- Revit二次开发: 文件损坏
哪些因素可能会导致损坏? 损坏的原因也各不相同,包括但不限于 无法读取/写入存储介质 程序发生崩溃(特别是在数据写入 RVT 模型时) 附加模块以通过正常 UI 无法或意外的方式修改图元 未经测试的多 ...
- NX二次开发-UFUN文件选择对话框UF_UI_create_filebox
NX11+VS2013 #include <uf.h> #include <uf_ui.h> UF_initialize(); //文件选择对话框 char sPromptSt ...
随机推荐
- 系统空闲时间判断&命名验证
一.系统空闲时间判断 需要一个自动登录注销的功能,当鼠标移动和或者键盘输入的时候认为当前用户在线,否则过了设置时间就自动退出.好在前辈们留下了这样的一个类: MouseKeyBoardOperate: ...
- 开发者最常用的 8 款 Sublime Text 3 插件
转载于:http://www.itxuexiwang.com/a/liunxjishu/2016/0228/177.html?1456925631Sublime Text作为一个尽为人知的代码编辑器, ...
- 爱上MVC~ajax调用分部视图session超时页面跳转问题
回到目录 这个问题出现了很多年了,都没有解决,问题是这样的,有一个需要授权才可以访问的分部视图,在一个view中使用ajax的方法去调用它,然后更新页面的局部DIV,这时,如果你长时间不操作,sess ...
- Atitit 发帖机实现(1)-----UsrQBm2008 页面上下文规范
Atitit 发帖机实现(1)-----UsrQBm2008 页面上下文规范 1.1. 网站绝对路径,页面绝对路径1 1.2. Java的javax.servlet.ServletContext1 ...
- Atitit blend mode COLOR_DODGE 混合模式 “颜色减淡”模式
Atitit blend mode COLOR_DODGE 混合模式 "颜色减淡"模式 1.1. 混合模式是图像处理技术中的一个技术名词1 1.2. 目录1 1.3. 颜色减淡C ...
- WPF入门教程系列三——Application介绍(续)
接上文WPF入门教程系列二——Application介绍,我们继续来学习Application 三.WPF应用程序的关闭 WPF应用程序的关闭只有在应用程序的 Shutdown 方法被调用时,应用程序 ...
- 高并发、海量数据处理尽量少使用using也能提升效率
请看下面两段: 第一种方式: MemoryStream stream = new MemoryStream(); string text = "aasasdfasdfad;sas;fkqew ...
- 23.实现一个名为Person的类和它的子类Employee,Employee有两个子类Faculty 和Staff。 具体要求如下: (1)Person类中的属性有:姓名name(String类型),地址address(String类型), 电话号码telphone(String类型)和电子邮件地址email(String类型); (2)Employee类中的属性有:办公室office(Stri
package banking; public class Person { private String name; public String address; public String tel ...
- 去除IE6浏览器下获得焦点的元素的虚线框的两个小办法
[1]onfocus = "this.blur()"//得到焦点时,失去焦点 e.g. <a href="#" onfocus = "this. ...
- Unity中 动态加载 Resources.Load()和Asset Bundle 的区别
版权声明:本文为博主原创文章,未经博主允许不得转载. 初学Unity的过程中,会发现打包发布程序后,unity会自动将场景需要引用到的资源打包到安装包里,没有到的不会跟进去.我们在编辑器里看到的Ass ...