C#進行Visio二次開發之文件導出及另存Web頁面

来源:http://www.cnblogs.com/wuhuacong/archive/2016/03/07/5251344.html
-Advertisement-
Play Games

在我前面很多關於Visio的開發過程中,介紹了各種Visio的C#開發應用場景,包括對Visio的文檔、模具文檔、形狀、屬性數據、各種事件等相關的基礎處理,以及Visio本身的整體項目應用,雖然時間過去很久,不過這些技術依舊還在使用中,最近應客戶培訓的需要,我對所有的內容進行了重新整理,把一些沒有介...


在我前面很多關於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)

同時,這些參數的相關說明如下所示。

NameRequired/OptionalData TypeDescription
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裡面有很多參數可以設置的。

ConstantValueDescription

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的處理更通用,效果也很不錯哦。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近學習了繼承,多態,集合,設計模式,有一個汽車租憑系統,給大家分享一下: 我們首先來看看我們這個系統的效果 1.做一個項目,我們首先對項目進行分析 根據我們最近學的知識,我們可以看出繼承,多態,集合,設計模式,我們都能用到 我們把所需要的類和簡單模式中的“簡單工廠”的工廠準備好 類圖: 01.車輛
  • 一、系統窗體 1)vehic類 //父類 汽車類 public abstract class Vehicle { //汽車牌照 public string CarID { get; set; } //汽車名 public string Name { get; set; } //顏色 public s
  • 最近在維護一位離職的同事寫的WPF代碼,偶然發現他使用C# string類型的兩個問題,在這裡記錄一下。 1. 使用Trim函數移除字串中的空格、換行符等字元串。 csRet.Trim(new char[] { '\r', '\n', '\t', ' ' });if (!csRet.Equals(s
  • 一、系統窗體 二、思路分析: 我們看見這有三個類分別是:Vehicle 交通工具類父類 Car和Truck分別是Vehicle是它的子類 需要用到繼承和多態、簡單工廠的知識點進行書寫 1)vehic類 public abstract class Vehicle { //無參數 public Vehi
  • 轉載地址:http://www.cnblogs.com/yangmingming/archive/2010/01/27/1657850.html .NET 框架概要: .NET框架,即.NET FrameWork ,其本身作為.NET 技術兩大方面之一。從狹義角度來講,即通常所說的.NET框架。然而
  • 轉載地址:http://www.cnblogs.com/yangmingming/archive/2010/02/03/1662546.html 一:Ildasm.exe簡介 這一微軟VS自帶工具,在上一篇博文《初識Ildasm.exe——IL反編譯的實用工具》中已經做了詳細介紹,這裡不再鰲述; 二
  • 轉載地址http://www.cnblogs.com/yangmingming/archive/2010/02/03/1662307.html Ildasm.exe 概要:(路徑:C:\Program Files (x86)\Microsoft SDKs\Windows\v數字.0\bin) 一.前
  • 前言 關於混合C 和C++的編程方式,本人之前寫過一篇博客(參見 "混合語言編程:C 使用原生的Directx和OpenGL" ),在之前的博客中,介紹了在C 的Winform和WPF下使用原生的Direct和OpenGL進行繪圖,主要使用的方式是聲明一個函數為導出函數,然後就可以在C 中使用這個函
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...