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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...