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 ...
随机推荐
- 优雅的使用python之环境管理
优雅的使用python之环境管理 缘起 情景1:不同python版本的管理 同一电脑上的多个python版本之前的管理,为了突出问题的普遍存在,下面是有人在segmentfault上提的问题. 摘自: ...
- java POI实现向Excel中插入图片
做Web开发免不了要与Excel打交道.今天老大给我一个任务-导出Excel.开始想的还是蛮简单的,无非就是查找,构建Excel,response下载即可.但是有一点不同,就是要加入图片, ...
- redis(一) 安装以及基本数据类型操作
redis(一) 安装以及基本数据类型操作 redis安装和使用 redis安装 wget http://download.redis.io/redis-stable.tar.gz tar zxvf ...
- 自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药
自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明
一.基础说明 这里说的“通用接口(CommonAPIs)”是使用微信公众账号一系列高级功能的必备验证功能(应用于开发模式). 我们通过微信后台唯一的凭证,向通用接口发出请求,得到访问令牌(Access ...
- Java基础之String、StringBuffer、StringBuilder
1:String类:字符串(重点) (1)多个字符组成的一个序列,叫字符串. 生活中很多数据的描述都采用的是字符串的.而且我们还会对其进行操作. 所以,java就提供了这样的一个类供我们使用. (2) ...
- Javascript隐式转换
乱想 javascript为什么需要隐式转换?如果没有会出现什么情况? 找了一圈没有看到关于这个的讨论,只好自己研究了,可能不一定正确,自行辨知. 郁闷就是郁闷在好好的,为什么要搞个隐式转换,一般来讲 ...
- NodeJS系列~第一个小例子,实现了request.querystring功能
返回目录 百度百科上: Node.js是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始,在Node中,Http是首要的.Node为创建http服务器作了优化,所以在网上 ...
- Mysql 函数分类
比较重要的 1 REVERSE(s) 将字符串s的顺序反过来 2 TRIM(s) 去掉字符串s开始和结尾处的空格 一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. ...
- salesforce 零基础开发入门学习(八)数据分页简单制作
本篇介绍通过使用VF自带标签和Apex实现简单的数据翻页功能. 代码上来之前首先简单介绍一下本篇用到的主要知识: 1.ApexPages命名空间 此命名空间下的类用于VF的控制. 主要的类包括但不限于 ...