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

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

 

目录
相关文章
|
3月前
|
Web App开发 监控 安全
OSS客户端签名直传实践:Web端安全上传TB级文件方案(含STS临时授权)
本文深入解析了客户端直传技术,涵盖架构设计、安全机制、性能优化等方面。通过STS临时凭证与分片上传实现高效安全的文件传输,显著降低服务端负载与上传耗时,提升系统稳定性与用户体验。
423 2
|
10天前
|
安全 测试技术 程序员
web渗透-文件包含漏洞
文件包含漏洞源于程序动态包含文件时未严格校验用户输入,导致可加载恶意文件。分为本地和远程包含,常见于PHP,利用伪协议、日志或session文件可实现代码执行,需通过合理过滤和配置防范。
104 0
web渗透-文件包含漏洞
|
数据可视化 Python
通过python建立一个web服务查看服务器上的文本、图片、视频等文件
通过python建立一个web服务查看服务器上的文本、图片、视频等文件
193 0
【Azure 应用服务】部署Azure Web App时,是否可以替换hostingstart.html文件呢?
【Azure 应用服务】部署Azure Web App时,是否可以替换hostingstart.html文件呢?
127 0
|
JSON 数据格式
【应用服务 App Service】在Azure Web App的部署文件中,是否可以限制某些文件无法被访问?(如json)
【应用服务 App Service】在Azure Web App的部署文件中,是否可以限制某些文件无法被访问?(如json)
110 0
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
470 3
|
10月前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
200 3
|
9月前
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
542 12
|
10月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
396 4
|
安全 程序员 编译器
C#一分钟浅谈:泛型编程基础
在现代软件开发中,泛型编程是一项关键技能,它使开发者能够编写类型安全且可重用的代码。C# 自 2.0 版本起支持泛型编程,本文将从基础概念入手,逐步深入探讨 C# 中的泛型,并通过具体实例帮助理解常见问题及其解决方法。泛型通过类型参数替代具体类型,提高了代码复用性和类型安全性,减少了运行时性能开销。文章详细介绍了如何定义泛型类和方法,并讨论了常见的易错点及解决方案,帮助读者更好地掌握这一技术。
195 11